質問編集履歴
2
一応動作した版を追記
title
CHANGED
|
File without changes
|
body
CHANGED
|
@@ -73,6 +73,7 @@
|
|
|
73
73
|
やはり非同期通信が原因とのことでしたので、初めてながらasync/awaitというやつで書き換えてみましたが
|
|
74
74
|
何かが足りないのか、やはり検索結果は変わりません…
|
|
75
75
|
```Node.js
|
|
76
|
+
(略)
|
|
76
77
|
async function main() {
|
|
77
78
|
console.log('ループ開始');
|
|
78
79
|
for(let i=0; i<3; i++){
|
|
@@ -98,4 +99,49 @@
|
|
|
98
99
|
}
|
|
99
100
|
|
|
100
101
|
main();
|
|
101
|
-
```
|
|
102
|
+
```
|
|
103
|
+
### 動作した版
|
|
104
|
+
いただいた回答を元にさらに修正したところ、無事動作しました
|
|
105
|
+
```Node.js
|
|
106
|
+
const Twit = require('twit');
|
|
107
|
+
|
|
108
|
+
const T = new Twit({
|
|
109
|
+
consumer_key: "略",
|
|
110
|
+
consumer_secret: "略",
|
|
111
|
+
access_token_key: "略",
|
|
112
|
+
access_token_secret: "略",
|
|
113
|
+
app_only_auth: true
|
|
114
|
+
});
|
|
115
|
+
|
|
116
|
+
let num = 0;
|
|
117
|
+
let lastId = '';
|
|
118
|
+
|
|
119
|
+
let params = {
|
|
120
|
+
q: '#ハッシュタグ since:2018-11-28_00:00:00_JST until:2018-11-28_00:30:00_JST',
|
|
121
|
+
count: 3,
|
|
122
|
+
max_id: lastId,
|
|
123
|
+
result_type: 'recent',
|
|
124
|
+
include_entities: false
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
!(async () => {
|
|
128
|
+
for(let i=1; i<=3; i++){
|
|
129
|
+
console.log('\n\n' + i + '回目の検索開始 ID' + lastId + '以前のツイートを検索');
|
|
130
|
+
params.max_id = lastId;
|
|
131
|
+
const result = await T.get('search/tweets', params);
|
|
132
|
+
result.data.statuses.forEach(function(val, index, ar){
|
|
133
|
+
num++;
|
|
134
|
+
console.log(`\n${parseInt(index) + 1}個目のツイート (累計${num}個目)`);
|
|
135
|
+
console.log('@' + val.user.screen_name);
|
|
136
|
+
console.log(val.text.replace(/\r?\n/g, ''));
|
|
137
|
+
lastId = val.id_str;
|
|
138
|
+
console.log('ツイートのIDは' + lastId);
|
|
139
|
+
})
|
|
140
|
+
console.log('\n最後のツイートのIDは' + lastId);
|
|
141
|
+
}
|
|
142
|
+
})();
|
|
143
|
+
```
|
|
144
|
+
このままだと再検索のたびに最初と最後のツイート内容が重複してしまうので、ほんとは再検索の際にIDを-1したいところですが
|
|
145
|
+
なまじIDの桁数が多いため計算に誤差が生じて面倒なので、ひとまず重複をよしとしています
|
|
146
|
+
> なぜJavaScriptで「76287755398823936」が正しく表示できないか、あるいはなぜRubyでも表せないか。
|
|
147
|
+
> https://7io.org/2011/07/02/21:11:55/
|
1
async/awaitで書き換え
title
CHANGED
|
File without changes
|
body
CHANGED
|
@@ -67,4 +67,35 @@
|
|
|
67
67
|
それともJavaScriptの何か初歩的な間違い(スコープなど)を犯しているのでしょうか?
|
|
68
68
|
|
|
69
69
|
ここさえ解決できれば、800ツイートでも2000ツイートでも(規制のかからないかぎり)検索できるとは思うのですが…
|
|
70
|
-
ご教授よろしくお願いいたします。
|
|
70
|
+
ご教授よろしくお願いいたします。
|
|
71
|
+
|
|
72
|
+
### 追記
|
|
73
|
+
やはり非同期通信が原因とのことでしたので、初めてながらasync/awaitというやつで書き換えてみましたが
|
|
74
|
+
何かが足りないのか、やはり検索結果は変わりません…
|
|
75
|
+
```Node.js
|
|
76
|
+
async function main() {
|
|
77
|
+
console.log('ループ開始');
|
|
78
|
+
for(let i=0; i<3; i++){
|
|
79
|
+
await search();
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
function search() {
|
|
84
|
+
return new Promise((resolve, reject) => {
|
|
85
|
+
console.log('検索開始');
|
|
86
|
+
params.max_id = lastId;
|
|
87
|
+
T.get('search/tweets', params, (err, data, response) => {
|
|
88
|
+
data.statuses.forEach(function(val, index, ar){
|
|
89
|
+
console.log(index);
|
|
90
|
+
console.log('@' + val.user.screen_name);
|
|
91
|
+
console.log(val.text);
|
|
92
|
+
lastId = val.id.str;
|
|
93
|
+
});
|
|
94
|
+
});
|
|
95
|
+
console.log('最後のIDは' + lastId);
|
|
96
|
+
resolve();
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
main();
|
|
101
|
+
```
|