質問編集履歴

2

一応動作した版を追記

2018/11/28 04:05

投稿

elpha
elpha

スコア18

test CHANGED
File without changes
test CHANGED
@@ -148,6 +148,8 @@
148
148
 
149
149
  ```Node.js
150
150
 
151
+ (略)
152
+
151
153
  async function main() {
152
154
 
153
155
  console.log('ループ開始');
@@ -199,3 +201,93 @@
199
201
  main();
200
202
 
201
203
  ```
204
+
205
+ ### 動作した版
206
+
207
+ いただいた回答を元にさらに修正したところ、無事動作しました
208
+
209
+ ```Node.js
210
+
211
+ const Twit = require('twit');
212
+
213
+
214
+
215
+ const T = new Twit({
216
+
217
+ consumer_key: "略",
218
+
219
+ consumer_secret: "略",
220
+
221
+ access_token_key: "略",
222
+
223
+ access_token_secret: "略",
224
+
225
+ app_only_auth: true
226
+
227
+ });
228
+
229
+
230
+
231
+ let num = 0;
232
+
233
+ let lastId = '';
234
+
235
+
236
+
237
+ let params = {
238
+
239
+ q: '#ハッシュタグ since:2018-11-28_00:00:00_JST until:2018-11-28_00:30:00_JST',
240
+
241
+ count: 3,
242
+
243
+ max_id: lastId,
244
+
245
+ result_type: 'recent',
246
+
247
+ include_entities: false
248
+
249
+ }
250
+
251
+
252
+
253
+ !(async () => {
254
+
255
+ for(let i=1; i<=3; i++){
256
+
257
+ console.log('\n\n' + i + '回目の検索開始 ID' + lastId + '以前のツイートを検索');
258
+
259
+ params.max_id = lastId;
260
+
261
+ const result = await T.get('search/tweets', params);
262
+
263
+ result.data.statuses.forEach(function(val, index, ar){
264
+
265
+ num++;
266
+
267
+ console.log(`\n${parseInt(index) + 1}個目のツイート (累計${num}個目)`);
268
+
269
+ console.log('@' + val.user.screen_name);
270
+
271
+ console.log(val.text.replace(/\r?\n/g, ''));
272
+
273
+ lastId = val.id_str;
274
+
275
+ console.log('ツイートのIDは' + lastId);
276
+
277
+ })
278
+
279
+ console.log('\n最後のツイートのIDは' + lastId);
280
+
281
+ }
282
+
283
+ })();
284
+
285
+ ```
286
+
287
+ このままだと再検索のたびに最初と最後のツイート内容が重複してしまうので、ほんとは再検索の際にIDを-1したいところですが
288
+
289
+ なまじIDの桁数が多いため計算に誤差が生じて面倒なので、ひとまず重複をよしとしています
290
+
291
+ > なぜJavaScriptで「76287755398823936」が正しく表示できないか、あるいはなぜRubyでも表せないか。
292
+
293
+ > https://7io.org/2011/07/02/21:11:55/

1

async/awaitで書き換え

2018/11/28 04:05

投稿

elpha
elpha

スコア18

test CHANGED
File without changes
test CHANGED
@@ -137,3 +137,65 @@
137
137
  ここさえ解決できれば、800ツイートでも2000ツイートでも(規制のかからないかぎり)検索できるとは思うのですが…
138
138
 
139
139
  ご教授よろしくお願いいたします。
140
+
141
+
142
+
143
+ ### 追記
144
+
145
+ やはり非同期通信が原因とのことでしたので、初めてながらasync/awaitというやつで書き換えてみましたが
146
+
147
+ 何かが足りないのか、やはり検索結果は変わりません…
148
+
149
+ ```Node.js
150
+
151
+ async function main() {
152
+
153
+ console.log('ループ開始');
154
+
155
+ for(let i=0; i<3; i++){
156
+
157
+ await search();
158
+
159
+ }
160
+
161
+ }
162
+
163
+
164
+
165
+ function search() {
166
+
167
+ return new Promise((resolve, reject) => {
168
+
169
+ console.log('検索開始');
170
+
171
+ params.max_id = lastId;
172
+
173
+ T.get('search/tweets', params, (err, data, response) => {
174
+
175
+ data.statuses.forEach(function(val, index, ar){
176
+
177
+ console.log(index);
178
+
179
+ console.log('@' + val.user.screen_name);
180
+
181
+ console.log(val.text);
182
+
183
+ lastId = val.id.str;
184
+
185
+ });
186
+
187
+ });
188
+
189
+ console.log('最後のIDは' + lastId);
190
+
191
+ resolve();
192
+
193
+ });
194
+
195
+ }
196
+
197
+
198
+
199
+ main();
200
+
201
+ ```