質問編集履歴

2

tex

2020/05/19 16:13

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -68,8 +68,310 @@
68
68
 
69
69
  **template/index.html**
70
70
 
71
+ ```HTML
72
+
73
+ {% extends 'base.html' %}
74
+
75
+
76
+
77
+ {% block header %}
78
+
79
+ {% endblock header %}
80
+
81
+
82
+
83
+ {% block content %}
84
+
85
+
86
+
87
+ <div class="alert alert-success" role="alert">
88
+
89
+ <h1>Twitter Timeline</h1>
90
+
91
+ </div>
92
+
93
+ <div class="alert alert-primary" role="alert">
94
+
95
+ APIリミット:残り{{ API_limit }}回
96
+
97
+ </div>
98
+
99
+
100
+
101
+ # ここからテーブル
102
+
103
+ <table border="1" class="table table-condensed">
104
+
105
+ <tbody>
106
+
107
+ <tr>
108
+
109
+ <th class="table-primary">アイコン</th>
110
+
111
+ {% for imurl in Img %}
112
+
113
+ <td><img src="{{ imurl }}"></td>
114
+
115
+ {% endfor %}
116
+
117
+ </tr>
118
+
119
+ <tr>
120
+
121
+ <th class="table-primary">ユーザー名</th>
122
+
123
+ {% for user in User %}
124
+
125
+ <td>{{ user }}</td>
126
+
127
+ {% endfor %}
128
+
129
+ </tr>
130
+
131
+ <tr>
132
+
133
+ <th class="table-primary">つぶやき</th>
134
+
135
+ {% for text in Text %}
136
+
137
+ <td>{{ text }}</td>
138
+
139
+ {% endfor %}
140
+
141
+ </tr>
142
+
143
+ <tr>
144
+
145
+ <th class="table-primary">日時</th>
146
+
147
+ {% for date in Created_at %}
148
+
149
+ <td>{{ date }}</td>
150
+
151
+ {% endfor %}
152
+
153
+ </tr>
154
+
155
+
156
+
157
+ </tbody>
158
+
159
+ </table>
160
+
161
+
162
+
163
+ {% endblock content %}
164
+
165
+ ```
166
+
167
+
168
+
169
+
170
+
171
+ **view.py**
172
+
71
173
  ```python
72
174
 
175
+ import time
176
+
177
+ import calendar
178
+
179
+ import datetime
180
+
181
+ import json
182
+
183
+ import sys
184
+
185
+ import codecs
186
+
187
+ from django.shortcuts import render
188
+
189
+
190
+
191
+ # Create your views here.
192
+
193
+ from requests_oauthlib import OAuth1Session
194
+
195
+
196
+
197
+ sys.stdout = codecs.getwriter('utf-8')(sys.stdout)
198
+
199
+
200
+
201
+ from django.http.response import HttpResponse
202
+
203
+ from twitterdata.models import TwitterModel
204
+
205
+
206
+
207
+
208
+
209
+ def index(request):
210
+
211
+
212
+
213
+
214
+
215
+ C_KEY = 'A'
216
+
217
+ C_SECRET = 'I'
218
+
219
+ A_KEY = 'm'
220
+
221
+ A_SECRET = 'm'
222
+
223
+
224
+
225
+ # url = 'https://api.twitter.com/1.1/statuses/update.json'
226
+
227
+ # msg = request.GET.get('words')
228
+
229
+ # params = {'status': msg, 'lang': 'ja'}
230
+
231
+ # req = tw.post(url, params=params)
232
+
233
+
234
+
235
+ tw = OAuth1Session(C_KEY, C_SECRET, A_KEY, A_SECRET)
236
+
237
+
238
+
239
+ url = 'https://api.twitter.com/1.1/statuses/home_timeline.json'
240
+
241
+ params = {'count': 10}
242
+
243
+ req = tw.get(url, params=params)
244
+
245
+
246
+
247
+ Userlist = []
248
+
249
+ Namelist = []
250
+
251
+ Textlist = []
252
+
253
+ Imglist = []
254
+
255
+ Created_atlist = []
256
+
257
+
258
+
259
+ if req.status_code == 200:
260
+
261
+ timeline = json.loads(req.text)
262
+
263
+ limit = req.headers['x-rate-limit-remaining']
264
+
265
+
266
+
267
+ for tweet in timeline:
268
+
269
+ Text = tweet['text']
270
+
271
+ User = tweet['user']['screen_name']
272
+
273
+ Name = tweet['user']['name']
274
+
275
+ Img = tweet['user']['profile_image_url']
276
+
277
+ Created_at = YmdHMS(tweet['created_at'])
278
+
279
+
280
+
281
+ data = TwitterModel()
282
+
283
+ data.user_id = User
284
+
285
+ data.user_name = Name
286
+
287
+ data.user_img = Img
288
+
289
+ data.user_text = Text
290
+
291
+ data.user_created_at = Created_at
292
+
293
+ data.save()
294
+
295
+
296
+
297
+ Userlist.append(User)
298
+
299
+ Namelist.append(Name)
300
+
301
+ Textlist.append(Text)
302
+
303
+ Imglist.append(Img)
304
+
305
+ Created_atlist.append(Created_at)
306
+
307
+
308
+
309
+ Message = {
310
+
311
+ 'timeline': timeline,
312
+
313
+ 'API_limit': limit,
314
+
315
+ 'Text': Textlist,
316
+
317
+ 'User': Userlist,
318
+
319
+ 'Name': Namelist,
320
+
321
+ 'Img': Imglist,
322
+
323
+ 'Created_at': Created_atlist,
324
+
325
+ }
326
+
327
+
328
+
329
+
330
+
331
+ return render(request, 'index.html', Message)
332
+
333
+
334
+
335
+ else:
336
+
337
+ Error = {
338
+
339
+ 'Error_message': 'API制限中',
340
+
341
+ }
342
+
343
+ return render(request, 'index.html', Error)
344
+
345
+
346
+
347
+
348
+
349
+ def YmdHMS(created_at):
350
+
351
+ time_utc = time.strptime(created_at, '%a %b %d %H:%M:%S +0000 %Y')
352
+
353
+ unix_time = calendar.timegm(time_utc)
354
+
355
+ time_local = time.localtime(unix_time)
356
+
357
+ return int(time.strftime('%Y%m%d%H%M%S', time_local))
358
+
359
+
360
+
361
+ ```
362
+
363
+
364
+
365
+ ### 試してみたこと
366
+
367
+
368
+
369
+ index.htmlのテーブル部分を↓のように修正したりしているのですが、上手くいきません。
370
+
371
+
372
+
373
+ ```python
374
+
73
375
  {% extends 'base.html' %}
74
376
 
75
377
 
@@ -108,49 +410,69 @@
108
410
 
109
411
  <th class="table-primary">アイコン</th>
110
412
 
413
+ <th class="table-primary">ユーザー名</th>
414
+
415
+ <th class="table-primary">つぶやき</th>
416
+
417
+ <th class="table-primary">日時</th>
418
+
419
+ </tr>
420
+
421
+ <tr>
422
+
111
423
  {% for imurl in Img %}
112
424
 
425
+ <tr>
426
+
113
427
  <td><img src="{{ imurl }}"></td>
114
428
 
429
+ </tr>
430
+
115
- {% endfor %}
431
+ {% endfor %}
116
-
432
+
117
- </tr>
433
+ </tr>
118
-
434
+
119
- <tr>
435
+ <tr>
120
-
121
- <th class="table-primary">ユーザー名</th>
122
436
 
123
437
  {% for user in User %}
124
438
 
439
+ <tr>
440
+
125
441
  <td>{{ user }}</td>
126
442
 
443
+ </tr>
444
+
127
- {% endfor %}
445
+ {% endfor %}
128
-
446
+
129
- </tr>
447
+ </tr>
130
-
448
+
131
- <tr>
449
+ <tr>
132
-
133
- <th class="table-primary">つぶやき</th>
134
450
 
135
451
  {% for text in Text %}
136
452
 
453
+ <tr>
454
+
137
455
  <td>{{ text }}</td>
138
456
 
457
+ </tr>
458
+
139
- {% endfor %}
459
+ {% endfor %}
140
-
460
+
141
- </tr>
461
+ </tr>
142
-
462
+
143
- <tr>
463
+ <tr>
144
-
145
- <th class="table-primary">日時</th>
146
464
 
147
465
  {% for date in Created_at %}
148
466
 
467
+ <tr>
468
+
149
469
  <td>{{ date }}</td>
150
470
 
471
+ </tr>
472
+
151
- {% endfor %}
473
+ {% endfor %}
152
-
474
+
153
- </tr>
475
+ </tr>
154
476
 
155
477
 
156
478
 
@@ -166,9 +488,161 @@
166
488
 
167
489
 
168
490
 
169
-
491
+ どうすれば
492
+
493
+
494
+
170
-
495
+ アイコン ユーザー名 つぶやき 日時← ヘッダー行
496
+
497
+
498
+
499
+ アイコン ユーザー名 つぶやき 日時
500
+
501
+
502
+
503
+ アイコン ユーザー名 つぶやき 日時
504
+
505
+
506
+
507
+ アイコン ユーザー名 つぶやき 日時
508
+
509
+
510
+
511
+ アイコン ユーザー名 つぶやき 日時
512
+
513
+
514
+
515
+ ↓ ↓ ↓
516
+
517
+
518
+
519
+ のように表示させることができるでしょうか?
520
+
521
+
522
+
523
+ **環境**
524
+
525
+ Python 3.6.7
526
+
527
+ Windows10
528
+
529
+ Django3.0
530
+
531
+
532
+
533
+ ### コードを下記のように書き換えました↓するとまた別の問題が起こりました
534
+
535
+
536
+
537
+ テーブルではなく、Dataframeで1行ずつテンプレートに取り出すようにしました。
538
+
539
+
540
+
541
+ すると、
542
+
543
+
544
+
545
+ ・下記のようにindex.htmlで画像タグが途切れて画像が表示されない。
546
+
547
+ ・つぶやきの本文が途切れる
548
+
549
+ ・Name: 0, dtype: object が末尾にまじる
550
+
551
+
552
+
553
+ user Ken_Kanata アイコン <img src="http://pbs.twimg.com/profile_images/... つぶやき @sirururun もしかしたら苦労をシェアできる人がイルカモシレナイ 日時 2020/05/20 01:01 Name: 0, dtype: object
554
+
555
+
556
+
557
+ ↑のようになってしまいます。
558
+
559
+
560
+
561
+
562
+
563
+ ### 解決したいこと
564
+
565
+
566
+
567
+ ・下記のようにindex.htmlで画像タグが途切れて画像が表示されない。
568
+
569
+ ・つぶやきの本文が途切れる
570
+
571
+ ・Name: 0, dtype: object が末尾にまじる
572
+
573
+ の3点をなんとか改善したいです。
574
+
575
+
576
+
577
+
578
+
579
+ どうぞよろしくお願いいたします。
580
+
581
+
582
+
583
+
584
+
585
+ 現在のコード↓
586
+
587
+ **template/index.html**
588
+
589
+ ```HTML
590
+
591
+ {% extends 'base.html' %}
592
+
593
+
594
+
595
+ {% block header %}
596
+
597
+ {% endblock header %}
598
+
599
+
600
+
601
+ {% block content %}
602
+
603
+ <div class="jumbotron">
604
+
605
+ <h1 class="display-4">Twitter Timeline</h1>
606
+
607
+ <hr class="my-4">
608
+
609
+ <a class="btn btn-primary btn-lg" href="" role="button">リロード</a>
610
+
611
+ </div>
612
+
613
+
614
+
615
+ <div class="alert alert-primary" role="alert">
616
+
617
+ <span class="badge badge-danger"> APIリミット:残り{{ API_limit }}回</span>
618
+
619
+ </div>
620
+
621
+
622
+
623
+ {% for index, row in Df.iterrows %}
624
+
625
+ <div class="card">
626
+
627
+ <div class="card-body">
628
+
629
+ {{ row }}
630
+
631
+ </div>
632
+
633
+ </div>
634
+
635
+ {% endfor %}
636
+
637
+
638
+
639
+ {% endblock content %}
640
+
641
+ ```
642
+
643
+
644
+
171
- **view.py**
645
+ **views.py**
172
646
 
173
647
  ```python
174
648
 
@@ -184,6 +658,8 @@
184
658
 
185
659
  import codecs
186
660
 
661
+ import pandas as pd
662
+
187
663
  from django.shortcuts import render
188
664
 
189
665
 
@@ -212,13 +688,13 @@
212
688
 
213
689
 
214
690
 
215
- C_KEY = 'A'
691
+ C_KEY = 'smFVvK13lKUr63TaghFOhaJNA'
216
-
692
+
217
- C_SECRET = 'I'
693
+ C_SECRET = '4t6WiQiHLvhd3IIQCSrzy24MTMKcyxrONf6P9QehMwneN3wI9I'
218
-
694
+
219
- A_KEY = 'm'
695
+ A_KEY = '761139811369353216-ZFDNvqRZl5L1aEFS4WQODnuZNGE76Fm'
220
-
696
+
221
- A_SECRET = 'm'
697
+ A_SECRET = 'SjchPG7PRrwKCGlZZpCBVqkvAk4cnbmx8Kk13TONoQq5m'
222
698
 
223
699
 
224
700
 
@@ -238,7 +714,7 @@
238
714
 
239
715
  url = 'https://api.twitter.com/1.1/statuses/home_timeline.json'
240
716
 
241
- params = {'count': 10}
717
+ params = {'count': 200}
242
718
 
243
719
  req = tw.get(url, params=params)
244
720
 
@@ -304,6 +780,28 @@
304
780
 
305
781
  Created_atlist.append(Created_at)
306
782
 
783
+
784
+
785
+ df_user = pd.Series(Userlist)
786
+
787
+ df_img = pd.Series(Imglist)
788
+
789
+ df_text = pd.Series(Textlist)
790
+
791
+ df_cdate = pd.Series(Created_atlist)
792
+
793
+
794
+
795
+ df = pd.concat([df_user,df_img,df_text,df_cdate], axis=1)
796
+
797
+ df.columns = ['user', 'アイコン', 'つぶやき', '日時']
798
+
799
+ df["アイコン"] = df["アイコン"].map(lambda s: '<img src="{}" />'.format(s))
800
+
801
+
802
+
803
+ datas = {'img': Imglist,'user': Userlist,'text': Textlist,'created_at': Created_atlist}
804
+
307
805
 
308
806
 
309
807
  Message = {
@@ -312,16 +810,10 @@
312
810
 
313
811
  'API_limit': limit,
314
812
 
315
- 'Text': Textlist,
813
+ 'Df':df,
316
-
317
- 'User': Userlist,
318
814
 
319
815
  'Name': Namelist,
320
816
 
321
- 'Img': Imglist,
322
-
323
- 'Created_at': Created_atlist,
324
-
325
817
  }
326
818
 
327
819
 
@@ -354,176 +846,8 @@
354
846
 
355
847
  time_local = time.localtime(unix_time)
356
848
 
357
- return int(time.strftime('%Y%m%d%H%M%S', time_local))
849
+ return str(time.strftime('%Y/%m/%d %H:%M', time_local))
358
850
 
359
851
 
360
852
 
361
853
  ```
362
-
363
-
364
-
365
- ### 試してみたこと
366
-
367
-
368
-
369
- index.htmlのテーブル部分を↓のように修正したりしているのですが、上手くいきません。
370
-
371
-
372
-
373
- ```python
374
-
375
- {% extends 'base.html' %}
376
-
377
-
378
-
379
- {% block header %}
380
-
381
- {% endblock header %}
382
-
383
-
384
-
385
- {% block content %}
386
-
387
-
388
-
389
- <div class="alert alert-success" role="alert">
390
-
391
- <h1>Twitter Timeline</h1>
392
-
393
- </div>
394
-
395
- <div class="alert alert-primary" role="alert">
396
-
397
- APIリミット:残り{{ API_limit }}回
398
-
399
- </div>
400
-
401
-
402
-
403
- # ここからテーブル
404
-
405
- <table border="1" class="table table-condensed">
406
-
407
- <tbody>
408
-
409
- <tr>
410
-
411
- <th class="table-primary">アイコン</th>
412
-
413
- <th class="table-primary">ユーザー名</th>
414
-
415
- <th class="table-primary">つぶやき</th>
416
-
417
- <th class="table-primary">日時</th>
418
-
419
- </tr>
420
-
421
- <tr>
422
-
423
- {% for imurl in Img %}
424
-
425
- <tr>
426
-
427
- <td><img src="{{ imurl }}"></td>
428
-
429
- </tr>
430
-
431
- {% endfor %}
432
-
433
- </tr>
434
-
435
- <tr>
436
-
437
- {% for user in User %}
438
-
439
- <tr>
440
-
441
- <td>{{ user }}</td>
442
-
443
- </tr>
444
-
445
- {% endfor %}
446
-
447
- </tr>
448
-
449
- <tr>
450
-
451
- {% for text in Text %}
452
-
453
- <tr>
454
-
455
- <td>{{ text }}</td>
456
-
457
- </tr>
458
-
459
- {% endfor %}
460
-
461
- </tr>
462
-
463
- <tr>
464
-
465
- {% for date in Created_at %}
466
-
467
- <tr>
468
-
469
- <td>{{ date }}</td>
470
-
471
- </tr>
472
-
473
- {% endfor %}
474
-
475
- </tr>
476
-
477
-
478
-
479
- </tbody>
480
-
481
- </table>
482
-
483
-
484
-
485
- {% endblock content %}
486
-
487
- ```
488
-
489
-
490
-
491
- どうすれば
492
-
493
-
494
-
495
- アイコン ユーザー名 つぶやき 日時← ヘッダー行
496
-
497
-
498
-
499
- アイコン ユーザー名 つぶやき 日時
500
-
501
-
502
-
503
- アイコン ユーザー名 つぶやき 日時
504
-
505
-
506
-
507
- アイコン ユーザー名 つぶやき 日時
508
-
509
-
510
-
511
- アイコン ユーザー名 つぶやき 日時
512
-
513
-
514
-
515
- ↓ ↓ ↓
516
-
517
-
518
-
519
- のように表示させることができるでしょうか?
520
-
521
-
522
-
523
- **環境**
524
-
525
- Python 3.6.7
526
-
527
- Windows10
528
-
529
- Django3.0

1

「テーブルタグで」を追加

2020/05/19 16:13

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -8,7 +8,7 @@
8
8
 
9
9
  肝心のテンプレートで表示させるところでつまづいており、
10
10
 
11
- 下記のように表示させたいのですが、
11
+ テーブルタグで下記のように表示させたいのですが、
12
12
 
13
13
 
14
14
 
@@ -36,7 +36,7 @@
36
36
 
37
37
 
38
38
 
39
- ↓のようになってしまいます。
39
+ ↓のようなテーブルになってしまいます。
40
40
 
41
41
 
42
42