スクレイピング プログラミング

kotoriatokoでAPIでは取得できない高頻度のツイートをスクレイピングする

この記事は約6分で読めます。

 

こんにちは、ミナピピン(@python_mllover)です。mentaの案件でkotoriotokoなるスクレイピングツールを紹介されて調査したのですが、まあまあ使えたのでメモがてら紹介しておきます。

 

ちなみにこのツール、何がすごいのかという通常のTwitterのAPIではsearchで条件を満たしているにも関わらず取得制限など検索に引っかからないツイートも余すところなく取得してくれる点です。

 

kotoriotoko

 

gitのリポジトリ:https://github.com/ShellShoccar-jpn/kotoriotoko

 

日本語版の解説は少しクサイがプログラム自体はスゴイです。ただTwitterのAPIそのものの縛りである10日前以上のツイートを取得することは不可能みたいです。10日前以上のツイート取得はTwitter公式のAPIの通信を分析してクライアント専用のAPI通信を見つけてそれを使うしかないかなと思いますが、クライアント偽装とか手間が掛かりそうですし、そこまでツイート取得に命を掛けていないので気が向いたらやるかも。。。

 

kotoriotokoの初期設定

 

# リポジトリのクローン
$ git clone https://github.com/ShellShoccar-jpn/kotoriotoko.git

 

まずtwitterのAPI鍵が必要です。API鍵が無くても一応使えますが、1分ごとの高頻度のデータを収集するためにはTwitterのAPI鍵が必須です。API鍵はtwitterのデベロッパーサイトで作成できます

 

Use Cases, Tutorials, & Documentation
Publish & analyze Tweets, optimize ads, & create unique customer experiences with the Twitter API, Twitter Ads API, & Twitter Embeds.

 

API鍵を作成したら以下の4つをコピーしてください。

 

APIキー
APIキーシークレット
アクセストークン
アクセストークンシークレット

 

そして以下のコマンドを実行します。要はconfigの中にCOMMON.SHLIBというファイルをCOMMON.SHLIB.sampleをコピーして作っているだけです。

 

$ cd /CONFIG
$ cp COMMON.SHLIB.SAMPLE COMMON.SHLIB

 

次はCOMMON.SHLIBの中にi以下の箇所に先ほど取得した4つAPI鍵とアカウント名(@以降:@test⇒test)を貼り付けて置き換えます。貼り付けはVIMでなくてもメモ帳を使用しても大丈夫です。

 

<COMMON.SHLIB>

:
            :
######################################################################
# My account info
######################################################################

readonly MY_scname='YOUR_TWITTER_ID_(SCREEN_NAME)'
readonly MY_apikey='SET_YOUR_CONSUMER_KEY_HERE'
readonly MY_apisec='SET_YOUR_CONSUMER_SECRET_HERE'
readonly MY_atoken='SET_YOUR_ACCESS_TOKEN_HERE'
readonly MY_atksec='SET_YOUR_ACCESS_SECRET_HERE'
            :
            :

 

これが終わったらこれらを使ってベアラーを作成します。

 

$ cd <小鳥男のインストールディレクトリー>/BIN
$ ./getbtwid.sh

 

これでreadonly MY_bearer='1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012'(例) みたいなベアラートークンが発行されるので、このまま先ほどのconfigのCOMMON.SHLIBに張り付けて保存します。

 

これで初期設定完了です。

 

スポンサーリンク
スポンサーリンク

KOTORIOTOKOの使い方

 

使い方についてはread.meに懇切丁寧に書かれているので特にここで追記することはないかなと思いますが、簡単に初期設定とツイート検索コマンドだけ紹介しておきます。

ツイート検索

 

$ cd <小鳥男のインストールディレクトリー>/APPS
$ gathertw.sh コロナワクチン OR ワクチン -m -filter:retweets -filter:URL -filter:bot -filter:https

 

これで取得したツイートがgathertw.sh~~~.dataというディレクトリが作成されます。

ツイート情報はRAWの方にjson、RESの方にTXTで保存されています。

 

Pythonでツイートをcsv出力する

 

import json
import pandas as pd
#変換したいJSONファイルを読み込む
file_lists = glob.glob(r"C:~~\gathertw.sh20211017083920.data\RAW\**\*\*")
datas = []

# ファイルを1つずつ読み込んでリストに格納して最後にcsvに吐き出す
for file in file_lists:
    json_open = open(file,'r', encoding='utf-8')
    data = json.load(json_open)
    for d in data['statuses']:
        year = d['created_at'][-4:]
        if d['created_at'][4:7]=='Oct':
            month = 10 #9月だったらSEP 8月だったらAUGなど任意に変更してください
        day = d['created_at'][8:10]
        hour = d['created_at'][11:13]
        minute = d['created_at'][14:16]
        second = d['created_at'][17:19]
        d_time= f'{year}-{month}-{day} {hour}:{minute}:{second}'
        datas.append([d_time, d['user']['name'],d['full_text']])
pd.DataFrame(datas, columns=['日付', 'アカウント名', 'ツイート']).to_csv('サンプル.csv', index=False,encoding='utf-8',errors='ignore')

 

 

 

 

コメント

タイトルとURLをコピーしました