#はじめに
この記録はPyhtonプログラミング初心者が、導入及び結果に至るまでの記録を残すものです。
既に活用されている方にはあまり益になる情報はないと思います。
今後は、テキストマイニングのための、記録になっていくと思います。
##環境
これまでは、Visual Studio、ExcelのVBAかメモ帳でコードを書いていたが、Mac環境とWindows環境が混在しそうなため、VSCodeで環境を作ることとした。
参考になりそうなサイトはいっぱいあるので、そちらを参照ください。
##詰まったところ
WindowsにPythonを導入するために公式ページからDLしてインストール
すると、32bitがインストールされたので、アンインストールして、64bitを明示的にインストール
(あんまり読まなかったのですが、VSCodeのExtensionの一部が対応していないとかのエラーが出ていたと思います。)
インストール後コマンドライン(Powershell)にpipとかpythonとか打っても反応がない・・。
多分なんか通ってないなと思いつつ、検索するとやはりpathが通っていないようであることが判明。
環境変数にpathの登録を行い、動くように。インストール時にチェックボックスがあったと記述がある記事もありましたが、気が付きませんでした。
C:\Users\(ユーザー名)\AppData\Local\Programs\Python\Python37\Scripts\;
C:\Users\(ユーザー名)\AppData\Local\Programs\Python\Python37\;
ちなみに古い記事だと、anaconda環境をインストールした際もこのpathを登録するような記事もありましたが、現在は非奨励だそうです。
##そもそもなんで、こんなに苦労したか
VSCodeでPythonのインタプリタ―を指定した際に、実行したいインタープリターと自動的にインストールされる先が異なっていたため。
理屈はわかりますが変更方法が分からないので、この設定に非常に時間がかかった。
##twitterアカウントのdev登録
いろいろ記事があるので手続きは省略
メール認証(届いたメールのconfirm)を忘れていましたが、実質3営業日程度で完了。私の英語がうまくなかったのか、申請後の確認メールは日本語で問い合わせが来ました。
アプリの申請を行い、トークンを取得して準備完了。(こちらは審査なしで入力のみで完了)
###実際の取得
参考にした記事はこちら
https://qiita.com/kngsym2018/items/3719f8da1f129793257c
大体読めばわかるのですが、今後も調べる必要があるのが以下の箇所
for tweet in tweepy.Cursor(api.search, q=q, count=100,tweet_mode='extended').items():
1.tweetに何が返ってきているのかよくわからない。
2.tweet_modeって何?
3.そもそもパラメータ何があるの?
2については比較的簡単に解決
https://qiita.com/floatnflow/items/8b252b277cb35c924911
上記ページの方が書いているように、tweetが省略されるのを防いでいるようでした。
1については、調べたところ、
https://kurozumi.github.io/tweepy/api.html#API.search
上記に記載の通り、
API.search(q[, lang][, locale][, rpp][, page][, since_id][, geocode][, show_user])
でもなんか記載が足りないような・・。
https://developer.twitter.com/en/docs/tweets/search/api-reference/get-search-tweets
こっちのページを見ると、もう少しデータが多いですね。
なので、公式の方を参照してみることにしました。
変数名 | 必須 | 内容 | reference |
---|---|---|---|
q | 〇 | 検索したいワード,UTF8で最大500文字まで | |
lang | 取得するツイートを指定した言語に制限する。言語はISO 639-1コードで指定する。(例:ja) | https://ja.wikipedia.org/wiki/ISO_639-1コード一覧 | |
locale | 送信するクエリの言語を指定する。(現在は日本だけ動く)通常はdefaultで動くはずらしい。指定する場合は上と同様 | ||
result_type | 取得結果の取得方法を選ぶ。 mixed:人気のtweetとrealtimeのtweetの両方を返す。 recent:最近のtweetを返す。 popular:人気のTweetだけを返す。 |
||
count | ページ当たりのtweetの最大数。標準は15、最大100 | 文法的には昔のAPIのrppと同じ | |
until | 指定した日付YYYY-MM-DDまでのtweetを取得する。ただし7日以内 | 1週間前までしか取得できない。 | |
since_id | 指定されたIDよりも大きなものだけを返す。(IDが古い順にナンバーを持っている?) | ||
max_id | 指定されたID以下のtweetを返却する。 | ||
geocode | 指定された緯度・経度の半径内に位置するユーザーのツイートを取得する。その位置はGeotagging APIから取得するが、それができなければユーザーのプロフィールから取得する。 | ||
include_entities | ツイートオブジェクト内のentitiesプロパティを含めるか否か。 |
##模擬コード
15minで180のtweetの制限があるので、時間で起動しながらループ処理する必要があると考える。
windowsで動かすのでそこらへんは、タスクスケジューラ―に任せるとして、以下のようなものを組む
1:readcsv initfile #初期化用ファイル読み込み
2:get input 検索単語 from initfile
3:if rcent_search_result < 100 then #initfileの中身を見て、より過去のtweetを取得するのか、最近のtweetを取得するのかを確認する。
4:for tweet in teeepy.Consor(api.search,q=検索単語,lang=ja,count=100,since_id=これまで取得したIDの最大値)#最新のtweetを取得する
5: return since_id,items #for loopを抜ける際に最大のIDを取得し、initfileに書き込む
6:for tweet in teeepy.Consor(api.search,q=検索単語,lang=ja,count=100,max_id=これまで取得したIDの最小値)#より古いのtweetを取得する
7: return max_id,items #for loopを抜ける際に最大のIDと検索数を取得し、initfileに書き込む
多分こんな感じのコードになるはず。。古いほうが優先だと思うのでそっちだけ、検索結果を持てばいいかな。
とりあえず、続きはコードを作成してから!