tweepyとtwitterAPIでPythonからtwitterを操作してみた
TwitterAPIに登録するとTwitterのアプリを作成できます。
設定の画面にあるアプリ連携ってやつですね。
このAPIを使うことで外部からツイートしたりタイムラインを取得したりできるわけです。
外部ってのが例のごとくPythonになります。
PythonにはTweepyというTwitterを比較的簡単に操作できるモジュールがあるのです。
画像収集スクリプトよりは簡単にできましたが一応ハマった部分があったのでメモっておこうと思います。
ちなみに今回やったことは、
Tweppyを使ってPythonからツイートする
タイムラインを取得する
キーワード検索で特定のツイートを取得する、です。
それでは行ってみようー
Twitter APIとはなにか
APIってのはソフトウェアの機能を一般公開することで皆々様とその機能を共有しようじゃないか!っていうもの。
Twitter APIでいえば、ツイートの機能やタイムラインの機能をTwitterを介さずに外部からその機能を使えるよってこと。
なのでAPIに登録しちゃえばPythonを使ってターミナルからツイートしたり、ほかのユーザーのツイートを確認したりができる。
なのでコード次第でBotも作れるし、自動フォローもできるし、市場調査だってできたりする。
ただAPIには制限があって、例えば何時間に何回までしか使えないだとか連続で使えないだとかそんなところ。
ちなみにAPIを使わない方法もあるが僕にはまだ理解できない。
TwitterAPIに登録
APIがなんなのかわかったところで実際に登録してみよう。
やってみないとどんなもんなのかわからないでしょ。
事前準備するもの。
・電話番号を登録したTwitterアカウント
APIに登録すると、Consumer Key、Consumer Secret、Access Token、Access Token Secretが得られます。
この4つのキーを使って認証します。
TwitterAPIの登録はこちらの記事を参照ください。
下準備
Twitterを操作できるモジュールはいろいろあるようですが、今回はtweepyを使います。
$ sudo pip install tweepy
# coding:utf-8 import tweepy Consumer_key = '00LtW*****************' Consumer_secret = 'iqnFIN***********************************' Access_token = '39373094**************************************' Access_secret = '2zH******************************************' auth = tweepy.OAuthHandler(Consumer_key, Consumer_secret) auth.set_access_token(Access_token, Access_secret) api = tweepy.API(auth) print('ok')
consumer_key、consumer_secret、access_token、access_secretはtwitterAPIに登録するともらえるキーです。
authはOAuthの情報を入れたものです。
で.set_access_tokenがアクセストークンをセットする関数なんじゃないかと思われます。
OAuthってのはログインIDやパスワードを入力しないで認証が取れる認証方式の一種です。
信頼あってこその方式ですね。
参考サイト
▼http://wa3.i-3-i.info/word11616.html
▼Dropbox・Evernote・Twitter を使うアプリで見かける「OAuth認証」って何? | AppBank – iPhone, スマホのたのしみを見つけよう
api = tweepy.api(auth)はたぶんtweepyを使ってapi情報を取得する動きがあるんですが、インスタンスというらしいです。
クラスとかインスタンスがまだいまいちわかってないのであれですね、基本的なところも勉強する必要がありますね。
最後にちゃんとtweepyが読み込まれるか、キーは合っているか確認のため大丈夫ならokと表示させるようにしました。
importErrorの場合はtweepyがどのディレクトリにインストールされたのか確認する必要があります。
importの前にパスを書き込んであげるとちゃんと読んでくれますよ。
前回の記事を参考にしてください。
▼【Python3】progressbarとtqdmがImportErrorになったのでsys.pathで導いてあげた - 僕の世界観を変えてみる
not found の場合はファイル名を確認してください。
tweepy.pyという名前で保存してるとそのファイルを読み込んじゃうので読み込むモジュールとは異なる名前で保存しないとダメです。
pythonからツイートする
tweepyの...なんか書こうとしたけど忘れたwまいいかw
# coding:utf-8 import sys sys.path.append('/home/toor/ドキュメント/python') #tweetpy.pyのパスを指定 import tweetpy # .pyは書かなくてもimportできた api = tweetpy.api # apiと打つだけでtweetpy.apiを指示できる api.update_status(status='pythonからツイートしてます') # 連続で同じ内容のツイートはできない
上の項目で作ったtweetpy.pyをimportします。
僕の場合はドキュメント/pythonに保存しているのでsys.pathでパスを指定しました。
コメントにあるようにapiと入力することでtweetpy.apiを読み込んでます。
ツイートするときはupdate_statusを使うようです。
tweepyのバージョンによって書き方がことなるようで
api.update_status('pythonnからツイート')でokって書かれた記事もあったんですけど、これだとツイートできませんでした。
僕が使っているのはバージョン3.5で、その記事だと2.Xだったような?
ということなので気を付けましょう。
pythonからツイートしています
— hackerlife (@htmllifehack) 2017年9月11日
ちなみに同じ内容のツイートを連投するとエラーがでます。
tweepy.error.TweepError: [{'code': 187, 'message': 'Status is a duplicate.'}]
これはコードうんぬんではなくtwitter側がスパム防止のために講じた策のようです。
どうしてもスパム行為したい場合は文章の最後に時刻を入れると回避できそうです。
凍結されたくないので僕はやってません。
タイムラインを表示してみる
# coding:utf-8 import sys sys.path.append('/home/toor/ドキュメント/python') import tweetpy api = tweetpy.api for result in api.home_timeline(count=10): print(result.text)
タイムラインの表示はapi.home_timeline()で行います。
引数にcount=10を入れると10件分表示される形となります。
最後に.textにした理由は、テキストにしないと他の情報も入ってきてすごい量になっちゃうからです。
やってみたらわかると思います。
で、for文使ったのは.textを使うためです。
print(api.home_timeline(count=10).text)にするとAttributeErrorになっちゃうんです。
textの使い方間違えてる?
取得した結果が以下
toor@toor-VirtualBox:~/ドキュメント/python$ python3 twesc.py RT @momokurumy: 「子供の頃「地球最後の日に何する?」って話で「ご馳走食べに行く」とか「遊園地で遊び倒す」とか答えたヤツに地球最後の日にそんなとこ営業してるわけないって笑ってたじゃないですか?でも今の日本ならそれ行けそうですよねw」って今日お客さんと話して悲しく笑… RT @24000cm: この人オタクの願望でどんどん乳を盛られて可哀想だと思う https://t.co/n94Hcu9kmf マルチサービスで勝つには?UNITED 金子社長に聞く「新規事業に強い組織づくり」 https://t.co/jYD1Iy8loe @kpx_gt フォロパありがとうございます(^^) 普段は占い師で字相を見ています。 実力を上げるために様々な方の字を見ています。 もし良かったら、 筆跡占いに協力してもらえませんか笑笑?? メルマガは、お客様をリピーターにするために強力な効果を発揮します。https://t.co/SeXCO7ilIp #人を動かす文章添削サービス そろそろソフトバンクが2年になるので、とりあえず今の機種をsimフリー化しておいた(^ω^) #simフリー #iPhoneSE 【相互フォロー支援アカウント】当アカウントを上手に使ってフォロワーを増やしましょう。<手順> 当アカウントをフォロー→このツイートをRT→当アカウントのフォロアーをフォローRTすればする程フォロー返しで自身のフォロワーが増えていきます。 (#sougofollow) 86 RT @simanekomama: @chan_yamamoto (1)日米の演習が 北朝鮮の態度を さらに エスカレートしているのではないか。という指摘 が、前提。 (2)エスカレートしている行為を 一端休む、という選択肢をとるかどうか、という話 (3)圧力だけでなく、対話… RT @simanekomama: @chan_yamamoto 働きかけというのは、対話を持つうえで必要です。 ブログ記事紹介:[Vagrant] Plugins #global-status「起動しているBOXの一覧を表示」 https://t.co/geFO2mFz9I #Server #vagrant https://t.co/iQqWgpmPy3
ちなみにリストで指定するとfor使わなくても平気みたいです。
print('リスト表示の場合\n' + api.home_timeline()[1].text) for result in api.home_timeline(count=1): print('for文の場合\n' + result.text)
表示結果
toor@toor-VirtualBox:~/ドキュメント/python$ python3 twesc.py リスト表示の場合 ブログ記事紹介:ゲーム脳を鍛えよう https://t.co/3meyYrUzGi #Game #Human skill https://t.co/TDCaW6sCOd for文の場合 電子書籍 (Kindle版) 「たった1日で基本が身に付く! JavaScript超入門」2,225円、出版社:技術評論社、著:WINGSプロジェクト/片渕彼富、監修:山田祥寛 https://t.co/aKapMnAeJr
結果はどっちでも同じですね。
キーワード検索してみる
# coding:utf-8 import sys sys.path.append('/home/toor/ドキュメント/python') import tweetpy api = tweetpy.api search = api.search(q='python',lang='ja',count=10) for result in search: print(result.text)
api.searchでキーワード検索ができるようです。
q = クエリのことでこれはpython関連のツイート検索しています。
count = で何件分表示するか指定できます。
lang = これで日本語を指定しないとなんだかわからないツイートも表示されるのでjaにしています。
APIリファレンスによるとISO 639-1コードで指定できるようです。
表示結果
toor@toor-VirtualBox:~/ドキュメント/python$ python3 twpytest.py RT @24motz: Pythonを使う人の大多数はもはやプログラマーではないという、恐るべき現実を理解したのが今年の収穫 #pyconjp 「PyCon APAC 2017 in Malaysia」参加レポート:Day2:Jessica McKellar氏キーノート,「美しいコーディング」とは,Pythonで「見える」物理/数学教育 #gihyojp https://t.co/pWA6sVpejL highSierraでもpythonは2.7なのかあ。 Appleはどうするんだろう? #pyconjp 遅ればせながら、上げさせて頂きます😃 ご参考になれば、幸いです。 PyCon JP 2017チュートリアル「Pythonを用いたデータ分析入門」に参加してまいりました https://t.co/4YQhTp6lZ3 みんなPythonどう使ってるんや 推し言語はhaskell 世間はpythonだけども RT @24motz: Pythonを使う人の大多数はもはやプログラマーではないという、恐るべき現実を理解したのが今年の収穫 #pyconjp あ゛あ゛あ゛あ゛待ってーーー・・・。pythonも参照渡しなのかーーー・・・。 どうでもいいけど、Pythonの使い手は、Pythonist, Pythonia, Pythoner, Pythonistaと、呼称が人によって違ってめちゃくちゃ @aka__cs タヌキも見てます…←
ちゃんと絵文字も表現できるようですね。
#pyconjp 遅ればせながら、上げさせて頂きます😃
— コーラ愛飲者S (@Cokeesque_DF) 2017年9月11日
ご参考になれば、幸いです。
PyCon JP 2017チュートリアル「Pythonを用いたデータ分析入門」に参加してまいりましたhttps://t.co/4YQhTp6lZ3
まとめ
これでpythonからツイートができるようになりました。
次回は自動でフォローできるような仕組みを作っていこうかと思います。
それにしても、pythonもいきなりスクレイピングから入ったので基本的な知識が足りなくて苦戦しています。
Progateも無料でできるところまでは終わってしまったのでもう一回最初からやろうかな。
あとpython以外にPHPでいじってるひともいるようでPHPの記事も多く出てきます。
PHPも理解できたらもっと早くやりたいことができそうですね。
参考サイト
▼Tweepyを使って、PythonでTwitterのAPIを超簡単に操作する - StatsBeginner: 初学者の統計学習ノート
▼Tweepyのstatusリストで何が取れるのかわからなかったので、取り出してみた - Qiita
▼API Reference — tweepy 3.5.0 documentation