ハテブカスタム

はてなブログ初心者によるブログ初心者のためのブログ

Python入門⑤Twitter API・Excel でできること

\この記事をシェア!/

Python入門 Twitter API・Excelでできること

Photo by  Hitesh Choudhary  on  Unsplash

相互リツイートを確実にしたい。
ツイッターで、相互リツイートの約束を確実に返したいと思い、お返しできる方法を考えてみました。
Python × Twitter API でユーザー一覧の取得、SeleniumBasic で連続スクショ貼り付けなど。

  

相互リツイートを確実にしたい

Twitter で、リツイートをもらったお礼としてリツイートのお返しを約束したけれど、思いのほかリツイートをいただき、もれなくちゃんと返せているか、少し不安になってしまいました。

Python入門 Twitter API・Excelでできること


 

もともとのきっかけは、Twitter でよく見かける、

  • #ブログ仲間募集中
  • #フォロバ100パーセント
  • #相互リツイート

・・・などの、ハッシュタグがついたツイートをわたしも真似すれば、フォローやリツイートがもらえて、ブログ仲間さんも増えるかな・・・?、と思い、やってみたからでした。

こちらが、そのツイートです。
https://twitter.com/heureux_yoppy/status/1160125688017379328

 

フォローバックするのは、自分のフォロワーのところから確認して押していけばわかりやすいのですが、、リツイート返しの場合は、対象のツイートをクリックして、「○○件のリツイート」というところをクリックして、さらにそこから、ひとりずつ、それぞれのページに行かないと、リツイートできません。

その上、リツイートしたかどうかは、フォローバックのように一覧では、確認できません。
漏れがないかなどを確認するには、またそれぞれのリツイートいただいた方のページに飛んで、確認しなければ、なりません・・。

 

けっこう、たいへんです。。orz

 

何とかリツイートを確実に返したいと、これまで学んだPythonTwitter APIExcel を利用する方法を考えてみました。

 

手順としては、

  1. リツイートしてくれたユーザーの一覧をPython で取得
  2. 取得したユーザーのページのスクリーンショット(画面キャプチャ)をExcel ファイルのシートに貼り付ける(SeleniumBasic 使用)
  3. スクショを確認し、リツイート漏れをチェックしていく

といった感じです。
順番に、やっていきます。

 

Python × Twitter API でユーザー一覧の取得

こちらのツールを使えば同等のことができるようですが、後学のため、あえてPythonでやります。
GET statuses/retweeters/ids - ツイートをRTしたユーザーをIDで取得する

 

Python のインストール、Twitter API の登録に関しては、以前、ツイート分析をしたときのこの記事でも紹介していますが、、

rubirubi.hateblo.jp

 

下記のリンクが親切にまとめられているので、まだの方は、参考になさってください。
最新版のPythonインストールとIDLE起動の方法(WinとMac) | ガンマソフト株式会社
Twitter API 登録 (アカウント申請方法) から承認されるまでの手順まとめ ※2019年8月時点の情報 - Qiita

 

Twitter API の承認には、正直、少し手間と時間がかかります。
ですが、ツイートデータの分析など、Twitter のいろいろなデータを取得して利用することができるようになるので、Python機械学習スクレイピングなどに興味のある方は、ぜひチャレンジしてみてください。

 

ソースコード

まず、リツイートしてくれたユーザーの方々のリストを取得するコードは、こちらの記事を参考にしました。
Python と Twitter API でリツイートしたユーザーの情報を取得する | 株式会社トップゲート

 

こちらが、そのコードです。ほぼ、参考記事のままですが、取得するデータ項目、一度に取得するユーザー数などを変更しています。
rt-user.py · GitHub

コードに丁寧な解説があるので、そのまま削除せず引用させていただいています。

 

なお、コードの1,2行目の
#coding:utf-8
#!/usr/bin/env Python
についてですが、ご存じの方もいらっしゃるかと思いますが、この部分はコメントではなく、決まり文句のようなもので、使用する文字コードと実行するプログラムを宣言しています。
くわしく知りたい、という方は、下記を参考になさってください。
プログラムを保存するファイルで使用する文字コードを設定する | Python入門
Pythonプログラムの先頭行の #! シバン(Shebang)について | ガンマソフト株式会社

 

そして、このコードを利用するためには、requests_oauthlib ライブラリのインストールが必要です。

$ pip install requests requests_oauthlib

 

ライブラリについて

ライブラリとは、他のプログラムから利用される前提で作られたPython プログラムのことです。
ライブラリにはいろいろなものがあり、[pip] コマンドでインストールしておけば、「import ライブラリ名」と宣言することで呼び出すことができます。
また、Python にあらかじめ付属しているものは標準ライブラリと呼び、インストール不要で呼び出せます。
Python 標準ライブラリ — Python 3.7.4 ドキュメント
たとえば、今回のコードだと、[from requests_oauthlib import OAuth1Session] は外部ライブラリ、[import csv] などは標準ライブラリを呼び出しています。

 

インストール後、「Twitter Developper  > apps > keys and tokens」からキーを取得し、

 

Python入門 Twitter API・Excelでできること

 

コードの下記の部分を書き換えます。

※コード27~30行目

Python入門 Twitter API・Excelでできること

 

もう一か所、コードを書き換える部分があります。

※コード38行目 

Python入門 Twitter API・Excelでできること

 

このツイートIDですが、「""」で囲い、「,」(カンマ)区切りで複数指定することもできます。

ツイートIDの調べ方は、個々のツイートをクリックして表示されるURLの、「status/」から後ろの部分です。

 

Python入門 Twitter API・Excelでできること


ツイートID を書き変えたら、Python ファイルを保存して、コードを実行してください。 

$ python ファイル名.py

 

実行が完了すると、実行したPython ファイルと同フォルダ内に、「retweet_info.txt」 というテキストファイルが生成されています。

開くと、スクリーンネーム(ユーザー名の、@以降)の一覧が並んでいるかと思います。

これで、リツイートしてくれたユーザーのリストが、取得できました。 

※仕様により取得できる件数は直近100件が上限です。 

 

Python入門 Twitter API・Excelでできること

 

SeleniumBasic で連続スクショ貼り付け 

SeleniumBasic とは、Google ChromeFirefoxIE などのWeb ブラウザを、Excel マクロ(VBA)など外部プログラムから制御できるライブラリのことです。
以前こちらで紹介しました。今回は、これの応用です。

rubirubi.hateblo.jp

 

SeleniumBasic の設定は、この記事の下記の部分を参考になさってください。ここからリンクで行けます。

 

設定後、Excelを起動し、新しいブックを新規作成してください。
新規作成後、ファイルを一度保存します。「名前を付けて保存」から、「Excel マクロ有効ブック(*.xlsm)」の形式を選択し、適当なフォルダに保存します。
ファイル名も、適当でかまいません。

ソースコード

保存後、Excel の画面で「Alt」を押しながら「F11」(ファンクション)キーを押して、VBAエディタを開きます。
開いたら、メニューから「挿入 > 標準モジュール」を選択して新たにモジュールを作成し、下記のコードを貼り付けます。

 

貼り付け場所がわからない、という方は、こちらを参考になさってください。
Office TANAKA - 今さら聞けないVBA[マクロってどこに書けばいいの?]

 

※コード18、21行目にはご自身のツイッターアカウントのメールアドレス・パスワードをそれぞれ入れてください。

Python入門 Twitter API・Excelでできること

 

※コード43行目、「スクショを保存するフォルダの場所」は、任意で設定を、お願いします。
「例:D:\images\」

 

SeleniumBasic で使えるコマンドについては、下記を参考にしています。あまり情報がないので、助かります。
SeleniumBasicでExcelVBAからFirefoxを自動操作するための覚書 | dsp74118の補完庫

また、下記はSeleniumBasic 公式のサンプルです。ご参考まで。
SeleniumBasic/Examples/Excel at master · florentbr/SeleniumBasic · GitHub

 

Excelの編集

ユーザーリストをExcel シートに貼り付け

先ほどPython で生成した「retweet_info.txt」ファイルを開き、ユーザーリストをコピーします。
コピー後、作成したExcel ファイルの「Sheet1」をアクティブにし、A1セルに貼り付けます。(ユーザー名がA列にA1、A2、A3…という風に並んだ状態)

 

プログラムの実行ボタンを設置

こちらを参考に、VBA コード(マクロ)を実行するボタンを設置してください
ちなみに、マクロ名は「SeleniumScsho2」とつけています。

 

プログラムの実行 

さきほど作成したプログラムの実行ボタンを押してVBA を実行すると、IEインターネットエクスプローラー)のブラウザが起動し、Excel のSheet1 に並べたユーザーのページを順次表示して、スクリーンショットを貼り付けていきます。

ユーザーのリストをすべて巡回すると、ブラウザを閉じてプログラムの実行が完了します。

※コードのクリックメソッドがうまくいかず、ログインできない場合は、あらかじめIE でログインしてから実行してください。

 

Excel で確認 

シートを閲覧し、固定ツイートをリツイートしているか確認していきます。
左のシートほど新しくリツイートをくれたユーザーです。

もしリツイートしていなければ、A1セルのリンクをクリックすると、デフォルト利用しているブラウザで該当ユーザーのページが開きますので、リツイートしていけます。

Python入門 Twitter API・Excelでできること

 

また、「Ctrl」+「PgUp」「PgDn」のショートカットでシートを先送り、後戻しできます。
 

下記のコードはSheet1 以外のシートをまとめて削除するものです。
ボタンに追加しておけば、次回また利用する際に、役立つと思います。

 

以上です。お疲れさまでした!

  

まとめ・感想など 

今回のツールは(ツールとは呼べませんね 笑)、手作業感バリバリなのですが、Excel に貼られたリツイートしてくださった方々のプロフィールページページをひとつひとつ見てると、個性的な自己紹介や、どんなツイートを固定してるのかなど、楽しいし、勉強にもなりました。

本当はリツイートするところまで自動化したかったのですが、そもそも固定・PIN ツイートはAPI では取得ができないようなので、断念しました。
🐦 Twitter API 1.1 のできないこと - Liaro Engineering Blog - Medium

※固定ではなく、最新のツイートなら取得できます。下記の記事で、どんなことができるのか、詳しく解説されています。
Twitter APIをpythonで使うと〇〇ができる。 - どん底から這い上がるまでの記録

 

先で触れたように一度に取得できるユーザーの数は直近100件までなので、ある程度リツイートがたまったらPython を実行してユーザーのリストを新たに取得し、リツイートをお返ししていくのがよいかと、思います。 

きちんとお返ししていかなければいけませんが、こんな記事もありますので、リツイートは、少しずつ、夜中とかにそっと、お返しして行くのがいいかもしれませんね。
わたしも気をつけます・・。
それってtwitterで嫌われるツイートじゃないですか? | クコシャカクドットコム
 

フォローバック、リツイート返しのツイートによる反響は、わたしが想像していた以上にありました。

その効果かはわかりませんが、先日初めて、スマートニュースにこちらの記事が掲載されました。

rubirubi.hateblo.jp

 

あらためて、リツイート、いいねをいただいたツイッター同志の方々に感謝です。
こちらに関しては、次回アクセス数などの報告含め、記事に書きたいと、思います。

それでは、最後までお読みいただき、ありがとうございました。