RTだけ取得に挑戦

TwitterTwitter Developer

目次一覧

 状態:試行錯誤履歴  閲覧数:1,736  投稿日:2019-10-12  更新日:2020-01-14
これまで
Twitterから思うようにデータを取得できないためツラい

大前提 / 2019年10月12日時点の方針 / 実装開始

「statuses/user_timeline」気が付いた点 / 一応の目途が付いたためTwitterアカウントの関連スペックを確認 / RTデータ移行するための運用方法を整理


大前提 / 2019年10月12日時点の方針 / 実装開始

 閲覧数:588 投稿日:2019-10-12 更新日:2019-10-12

大前提


RTだけ取得するURL
用意されていないと思われる

RTだけ取得する専用API
・用意されていないと思われる

2019年10月12日時点の方針


ユーザータイムラインを取得
RTだけフィルタリング

参考
・何やってるかよく分からないのだけれども、ユーザータイムライン取得後、フィルタリングしている?
retweetlog-nodejs/myTwitter.js at master · bookii/retweetlog-nodejs
const getRetweets = (screenName, maxIdPrev, untilDate, includeSelf) => {
   return new Promise(async (resolve, reject) => {
       let retweets = [];
       let maxId;

       if (maxIdPrev) {
           maxId = bigInt(maxIdPrev);
       } else if (untilDate) {
           maxId = dateToStatusId(Date.parse(untilDate) + 15*60*60*1000);
       } else {
           maxId = dateToStatusId(Date.now());
       }

       try {
           while(true) {
               tweets = await getUserTimeline(screenName, maxId);
               if (tweets.length > 1) {
                   let retweetsChunk = [];
                   maxId = bigInt(tweets[tweets.length-1]['id_str']).add(-1);
                   retweetsChunk = tweets.map(tweet => tweet['retweeted_status']).filter(tweet => tweet);
                   if (includeSelf == false) {
                       retweetsChunk = retweetsChunk.filter(retweet => retweet['user']['screen_name'] != screenName);
                   }
                   // console.log('retweets.length: ' + retweets.length);
                   Array.prototype.push.apply(retweets, retweetsChunk);
                   if (retweets.length > RETWEETS_PER_REQUEST) {
                       break;
                   }
               } else {
                   break;
               }
           }
       } catch (error) {
           reject({items: error, maxId: maxId.toString()});
       }
       resolve({items: retweets, maxId: maxId.toString()});
   });
};


フィルタリング
「retweeted_status」プロパティ名をチェックするだけ
・見つからない場合はRTではない
Check if a tweet is a retweet

実装開始


既に「statuses/user_timeline」を取得していた
'screen_name'パラメータを変更することで、「retweeted_status」プロパティも確認できた

「statuses/user_timeline」気が付いた点 / 一応の目途が付いたためTwitterアカウントの関連スペックを確認 / RTデータ移行するための運用方法を整理

 閲覧数:497 投稿日:2019-10-12 更新日:2019-10-12

「statuses/user_timeline」気が付いた点


期間指定できない
「since」「until」指定不可

古い順から取得できない
指定したステータスIDより後のツイートを取得することは出来るが、最新日時より取得することに変わりはない
※古い順から3,200件取得することは出来ない

取得件数制限はRTだけに限らない
取得したツイート(件数制限あり)の中から、RTだけ取得しているだけ

一応の目途が付いたためTwitterアカウントの関連スペックを確認


私のツイート最古年月日
2017年10月2日

私が他人ツイートをRTした最古年月日
2019/06/23

管理画面経由で取得したtwitterデータ-2019-08-29
最古ツイート年月日
2018/09/26

RTデータ移行するための運用方法を整理


1.MAX期間指定するためのキーとなるツイートidを確認
from:hoge since:2017-10-02 until:2019-06-30

・1-1.最新タブをクリックする
・1-2.「一番上に表示されているツイート」の日付をクリックする
・1-3.URL末尾の数字(id)を取得する
https://twitter.com/hoge/status/xxxx

2.'max_id'パラメータを指定して、ツイートを取得
'「retweeted_status'が存在している場合のみ」という条件分岐を行い、RTのみ取得
RTだけ取得



「Twitterデータ」対応

デモ動作確認済API



週間人気ページランキング / 9-30 → 10-6
順位 ページタイトル抜粋 アクセス数
1 コインチェック株式会社   | Webサービスビジネス 3
2 TwitterOAuth では、画像URL を指定した画像投稿は出来ない(と思う)。ライブラリを使用しなければ出来るから、Twitter API の制限ではない(と思われる)  | Twitter 2
3 GitHubリモートリポジトリ名には日本語を使用できない。使用すると、ハイフンへ自動置換されてしまう | GitHub(Git) 1
3 「Twitter Developers」でApp作成 | Twitter Developer(Twitter) 1
3 開発 0 1
3 過去の「0文字引用RT」を期間指定して取得しようとするも、挫折 | Twitter API (Twitter) 1
3 Q4.「Twitter API」で「アプリ連携」の「許可を取り消す」ボタンを押すと、具体的にどんな処理が実行されるのでしょうか? 1
3 ファイナンス 1
3 「Twitter API」を利用するためには? / Twitter API v1.1 / OAuth 1.0A / OAuth 2.0 | Twitter Developer(Twitter) 1
3 ログイン 1
3 古いコードを処分 | プログラミング 1
3 トラブル発生する度に「Git GUI」を探すが、いつも「Git Bash」が一番じゃん、という結論になる。 | GitHub(Git) 1
3 「Windows10」へ「gitfor windows VERSION 2.22.0」をインストール | GitHub(Git) 1
3 本 | ブックマーク 1
3 Git BASH 作業履歴 2022/10/20 / P48 site-rank(First-Ranking-Service) / 「Add a README」後「git push -f origin main」実行したため、「README」削除 | Git BASH(Git) 1
3 Git BASH 作業履歴 2022/10/20 / P25 manga-user-ranking(Second-Ranking-Service) / 「Add a README」後「git merge --allow-unrelated-histories origin/main」実行して、「README」もコミット履歴に含める | Git BASH(Git) 1
3 mhtmlの問題 | Google Chrome 拡張機能 1
3 Git BASH 作業履歴 2022/10/21 / P28 site-ranking(4Th-Ranking-Service) / 他の「.git」ディレクトリが存在した状態のまま下記gitコマンドを実行したため、意図せず「submodule」化されてしまった例 | Git BASH(Git) 1
3 Git Bash で異なるディレクトリの指定ディレクトリへ移動する。「$ cd /L/3_開発/git/大阪府」 | Git BASH(Git) 1
3 2020年1月21日から最初に生成した以降、アクセストークンとアクセストークンシークレットは表示されなくなる | Twitter Developer(Twitter) 1
2025/10/7 1:02 更新