暇な時間を利用して個人開発をやっていますからくりです。
今回はPythonとTwitterAPIでツイート数順にランキング表示するアプリを作成してみました。
開発したきっかけ
アニメの人気キャラクターや人気商品はネットで検索すれば分かりますが、実際のところ何をもとにして集計されているのかわかりません。
Twitterであればより正確に把握できるのではないのかと思い、開発に至りました。
開発したプログラムの紹介
今回開発したプログラム「ツイート集計」はこちらです。
CSVやスクレイピングから取得した一覧を対象にツイート数の多い順に並び替えし出力します。
ダウンロードして実行することができます。
良ければ使ってみてください。
使い道
- アニメで人気なキャラクターが知りたいとき。
- 複数の商品でどれを買うべきか迷っているとき。
機能について
今回開発したプログラム「ツイート集計」には以下の機能があります。
1.検索条件の指定
タイトル、開始日、終了日を指定します。
タイトルに半角カンマ「,」を挟むことで複数指定可能です。
2.検索方法の指定
スクレイピングまたはCSVで一覧を取得します。
取得した一覧は検索対象になります。
3.集計機能
スクレイピングまたはCSVで取得した一覧をもとにTwitterAPIを通してツイート数を取得し、ツイート数の多い順に並び替えます。
4.出力方法の指定
集計結果をCSVまたはEXCELに出力します。
何も指定しなければ結果のみ出力します。
5.結果表示
集計結果を画面に出力します。
注意点
- 開始日、終了日は今日を含む直近の過去7日以内で指定して下さい。
- スクレイピングのリスト要素には全てのレコードに共通するクラス名を指定してください。
- 万が一、取得件数が上限に達した場合に利用できなくなる可能性があるため、config.iniにベアラートークンを指定できるようにしています。
- スクレイピングをする際にChromeDriverのバージョンを使用しているChromeのバージョンに合わせる必要があります。
本アプリケーションはバージョン107です。
こちらからダウンロードしてexeファイルの同じ階層に配置してください。
使用したライブラリまたはAPI
Twitterの操作や情報収集ができるAPI
スクレイピング、ブラウザ操作ができるライブラリ
GUIを作成するためのライブラリ
CSVやEXCELの読み書き、リスト作成、フィルターなどデータ操作を行うライブラリ
開発して思ったこと
開発期間は約1週間です。
いくつか躓いた点がありましたので共有したいと思います。
TwitterAPIは過去7日間までのツイートしか参照できない。
TwitterAPIは今日を含む過去7日間までのツイートしか参照できません。
過去7日間より前のツイートを取得したい場合は、学術研究用のプロダクトを使用する必要があります。
利用可能な対象者は、「論文執筆中の大学院生、学位論文執筆中の博士号取得候補者、学術機関に所属しているまたは雇用されている研究員」に限られます。
TwitterAPIは取得件数に上限がある。
TwitterAPIv2にはEssential、Elevated、Academic Researchというプランがあります。
Essentialは無料で最大50万件/月まで、
Elevatedは無料で最大200万件/月まで、
Academic Researchは最大1000万件/月まで利用可能です。
本アプリケーションはElevatedです。
ポジティブまたはネガティブな内容のツイートが指定できない?
URLに検索クエリを指定することで条件指定可能ですが、
ポジティブは「:)」、ネガティブは「:(」で指定可能なようです。
検索クエリに追加してみましたがエラーが発生したため除くことにしました。
ポジティブかネガティブか判断できなければ、ネガティブな内容も数に含まれることになるので「人気な」ランキングとは言えないかもしれません。
スクレイピングの条件指定が難しい。
スクレイピングは、サイトのHTML構成によって条件を変える必要があります。
様々な構成に対応したプログラムにする必要がありますが、複雑なため断念しました。
今回はリスト要素に全てのレコードに共通するクラス名が指定されているものに限られます。
まとめ
個人開発で作成したプログラム「ツイート集計」を紹介させていただきました。
今回はツイート数の多い順に並び替えるプログラムでしたが、TwitterAPIにはツイート、リツイート、いいねの操作やツイートの取得もできるのでそれらも機能に加えていきたいと思います。
また、ブログに個人開発で作成したプログラムや記事を載せていますので、よろしければ閲覧お願いいたします。
不具合や要望などありましたら、コメントもしくはブログのお問い合わせから連絡していただけると幸いです。