目次一覧
状態:試行錯誤履歴
閲覧数:1,447
投稿日:2019-10-12
更新日:2020-01-14
これまで
Twitterから思うようにデータを取得できないためツラい
大前提 / 2019年10月12日時点の方針 / 実装開始
「statuses/user_timeline」気が付いた点 / 一応の目途が付いたためTwitterアカウントの関連スペックを確認 / RTデータ移行するための運用方法を整理
Twitterから思うようにデータを取得できないためツラい
大前提 / 2019年10月12日時点の方針 / 実装開始
「statuses/user_timeline」気が付いた点 / 一応の目途が付いたためTwitterアカウントの関連スペックを確認 / RTデータ移行するための運用方法を整理
大前提 / 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データ移行するための運用方法を整理
「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だけ取得