読者です 読者をやめる 読者になる 読者になる

初老のボケ防止日記

おっさんのひとりごとだから気にしないようにな。

スポンサーリンク

PythonでTwitterの共通のフォロイーを調べる



ちょっと調べる必要が生じたので作成した。


どこかのFacebookリア充SNS

友達の友達は貴方の友達でしょう?

実際の俺たち

友達の友達が皆友達なわけでもないじゃねえか(イラッ

ということで、Twitterの相互フォローの人と顔を合わそうとすると誰が互いに知っているかわからないなあと思ったので、PythonのTwitterライブラリである「Tweepy」を使ってサクッと作りました。

Tweepy

環境

特にネイティブに依存したライブラリではなさそうなのでOSはなんでも大丈夫だと思いますが試した環境がコチラ。

OS Ubuntu 14.04.3 LTS
Python 3.4.3

Tweepy自体はPython2系でも全然問題ないのだけれども、Pythonは日本語周りでいつもハマるので今回はPython3系にしました。

Tweepyの導入

pipでドーン

$ sudo apt-get install python3-pip
$ sudo pip3 install tweepy

pipだとPython2系にドーンされるのでpip3を使いましょう。

共通のトモダチをピックアップする

こんな感じのコードです。やってることはとてもシンプルでTweepyで任意のユーザのフォロイーのidを取得した後に、その結果をANDとってからユーザの個別情報を取得しているだけ。フォロイーの取得にapi.friends()を使えばその時点でアカウント名等が取得できるんだけども、すぐにAPIリミット制限がでてしまうので制限の緩いapi.friends_ids()でid一覧を取得してANDとってからapi.get_user()でアカウント名等を取得してるのがポイント。まあそれでも共通のフォロイーが多ければリミット喰らうのかもしれません。

friends.py

#! /usr/bin/env python3
# -*- coding: utf-8 -*-
import tweepy

# Twitter API Key here.
TWITTER_CONSUMER_KEY = 'XXXXXXXX'
TWITTER_CONSUMER_SECRET = 'XXXXXXXX'
TWITTER_ACCESS_TOKEN = 'XXXXXXXX'
TWITTER_TOKEN_SECRET = 'XXXXXXXX'

if __name__ == '__main__':

    auth = tweepy.OAuthHandler(TWITTER_CONSUMER_KEY, TWITTER_CONSUMER_SECRET)
    auth.set_access_token(TWITTER_ACCESS_TOKEN, TWITTER_TOKEN_SECRET)
    api = tweepy.API(auth)

    # check target username here.
    users = ['XXX', 'YYY'] 
    friends = []
    for user in users:
        friends.append(api.friends_ids(id=user))

    common_friends = set.intersection(*(set(x) for x in friends))
    print('[{}]\'s common friends({}).\n'.format(','.join(users), len(common_friends)))
    for usr_id in common_friends:
        user = api.get_user(user_id=usr_id)
        print('\t[{}][{}]'.format(user.screen_name, user.name))

Tweepyで利用するTwitter APIのキーは以下で登録して払い出しましょう。

https://dev.twitter.com/

払い出しの方法は既に世の中に沢山記事があるので割愛。現在はアカウント情報に電話番号を登録しておかないとキーの払い出しできないのでそこに気をつけましょう。

実行してみる。

$ python3 friends.py 

実行例

[osa030,franny0930,realeyez77]'s common friends(24).

	[stin_octavarium][すてぃんちゃん@平沢唯]
	[tacke][tacke@3/13巣鴨獅子王]
	[lack69s][lack]
	[keno1977][毛野犬坂さん]
	[yaimania][ゆきえちゃん(KOGE山KOGE太郎)]
	[sekitoba][赤兎馬]
	[sugimotoak][杉本哲]
	[kt81][kum@]
	[nory_kaname][N.Kaname@UnionSign]
	[teracy][ユリア・クソリプニツカヤ]
	[u_stella12][∠ざっきー@FCUW3/3夜]
	[chikuwabu][ちくわぶ]
	[kakenavi][かけなび]
	[weagstar][あゆむ 3.13巣鴨獅子王LIVE]
	[WD1001FALS][黒キャビア◆6Wc15ttSn/D2]
	[napplecomputer][なっぴー]
	[imodekun][非合法ウキヨエ・アニメイションブローカー]
	[winefeel][ゆうは。]
	[missaile][Tomoya Mikami(三上猫)]
	[96pen][蜜柑猫(焼肉)]
	[KaguraZR][神楽坂蔵人]
	[PrincePOPI][ぽぴ王子]
	[_popkiller_][Ryu@3/13 Aldevetz]
	[maloreno2][キャバレット高尾]

ち、恥部や。

[osa030,tkjWonderwall,harusounayu]'s common friends(1).

	[say_ring][せい りん]

哀しきお父さん連合や。

実行エラー時の対処

もし実行時にエラーが出る場合は以下をしましょう。

「Timestamp out of bounds」とAPIエラーが返ってきた

実行環境の時間がTwitterのサーバとずれてるとエラーになるようです。VMの場合は時間がずれてる場合が多いのでNTPで同期しましょう。

$ sudo ntpdate ntp.nict.go.jp
「asciiなんたらかんちゃら」とPythonがエラーを吐く

Python3をもってしてもOSに日本語フォント表示環境がなければ取得したアカウントのスクリーン名が日本語の場合に表示できませんので、サーバ版なら日本語フォントを表示できるようにしましょう。

$ sudo apt-get install language-pack-ja-base language-pack-ja
$ sudo update-locale LANG=ja_JP.UTF-8 LANGUAGE="ja_JP:ja"
$ source /etc/default/locale

入門 Python 3

入門 Python 3

  • 作者: Bill Lubanovic,斎藤康毅,長尾高弘
  • 出版社/メーカー: オライリージャパン
  • 発売日: 2015/12/01
  • メディア: 単行本(ソフトカバー)
  • この商品を含むブログを見る
実践 Python 3

実践 Python 3

Twitter API ポケットリファレンス (POCKET REFERENCE)

Twitter API ポケットリファレンス (POCKET REFERENCE)

スポンサーリンク