Skip to content

Instantly share code, notes, and snippets.

@gc373
Created August 2, 2017 14:04
Show Gist options
  • Select an option

  • Save gc373/8584cb1de2866b74937a13e644e20526 to your computer and use it in GitHub Desktop.

Select an option

Save gc373/8584cb1de2866b74937a13e644e20526 to your computer and use it in GitHub Desktop.
twitterの画像を検索して全部保存するやつ
const Twitter = require('twitter'),
req = require('request'),
fs = require('fs'),
client = new Twitter({
consumer_key: '',
consumer_secret: '',
access_token_key: '',
access_token_secret: ''
}),
moment = require('moment'),
jst = +9;
let max_id = "999999999999999999";
let max_id_old;
let cursor = '';
let yesterday = moment().add(-1, 'days').format('YYYY-MM-DD')
fs.mkdir("./media/", function (err) {
if (err) {
console.log(err);
return 1;
}
});
let getTime = 0;
let imgCount = 0;
getImage();
function getImage() {
let query = '#ドッツ -スラッシュ since:2016-09-05 filter:images max_id:' + max_id;
// let query = '#dotstokyo since:2016-09-05 filter:images max_id:' + max_id;
//let query = 'from:@dotstokyo ' + "since:2016-08-03 until:" + yesterday + "_23:59:59_JST" + ' filter:images max_id:' + max_id;
//let query = '#ドッツ -スラッシュ ' + "since:" + yesterday + "_00:00:00_JST" + "until:" + yesterday + "_23:59:59_JST" + ' filter:images max_id:' + max_id;
//let query = '#dotstokyo ' + "since:" + yesterday + "_00:00:00_JST" + "until:" + yesterday + "_23:59:59_JST" + ' filter:images max_id:' + max_id;
//let query = 'from:@dotstokyo ' + "since:" + yesterday + "_00:00:00_JST" + "until:" + yesterday + "_23:59:59_JST" + ' filter:images max_id:' + max_id;
let params = {
"q": query,
"count": 100,
"result_type": "recent",
"modules": "status",
};
console.log(params);
// ちなみに search/universal は公式のキーを使わないと叩けない
client.get('search/universal', params, (error, tweets, response) => {
if (!error) {
console.log("=====================", getTime++, "=====================")
tweets.modules.forEach((element) => {
let date = new Date(element.status.data.created_at),
yyyy_mm_dd = moment(date).format('YYYY-MM-DD');
max_id = element.status.data.id;
if (element.status.data.extended_entities) {
element.status.data.extended_entities.media.forEach((img) => {
let url = img.media_url_https + ":orig";
let file_name = yyyy_mm_dd + " " + img.media_url_https.slice(28);
console.log(imgCount++, " :image ulr -> ", url, " : ", file_name);
req(
{ method: 'GET', url: url, encoding: null },
function (error, response, body) {
if (!error && response.statusCode === 200) {
let filePath = "./media/" + file_name;
fs.writeFile(filePath, body, (err) => {
if (err) { console.log(err); return }
fs.utimes(filePath, Math.floor(date.getTime() / 1000), Math.floor(date.getTime() / 1000), function (err) {
});
});
}
}
);
})
}
});
console.log("next_max_id", max_id, " / max_id_old", max_id_old);
if (max_id != max_id_old) {
max_id_old = max_id;
setTimeout(() => { getImage() }, (1000 * 60 * 15) / 150); // 検索APIのリミットは 180 / 15min
}
} else {
console.log(error)
}
});
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment