質問編集履歴

2

スクリプトの変更と確認したい内容を追記しました。

2020/11/19 02:56

投稿

unity_level1
unity_level1

スコア8

test CHANGED
File without changes
test CHANGED
@@ -10,7 +10,7 @@
10
10
 
11
11
 
12
12
 
13
- 追記:
13
+ 追記(2020/11/18)
14
14
 
15
15
  追加でエラーが発生してしまったため、そちらも合わせてご教示いただけますと非常に助かります。
16
16
 
@@ -18,6 +18,18 @@
18
18
 
19
19
 
20
20
 
21
+ 追記2(2020/11/19):
22
+
23
+ 確認したい内容とご教示いただきましたスクリプトをスクリプト内に追記させていただきましたので、お手数ですが、
24
+
25
+ ご教示いただけますと幸いです。
26
+
27
+ ※ご教示いただきましたスクリプトはそのまま記載しました。convert_url(url)のurlをJSONで定義したimg_urlやファイルのパスを直書きしたり試したのですが、
28
+
29
+ Image upload failedを解消することができませんでした。
30
+
31
+
32
+
21
33
 
22
34
 
23
35
  ### 実行環境
@@ -110,6 +122,8 @@
110
122
 
111
123
  import urllib.request
112
124
 
125
+ import re       # <-------追加
126
+
113
127
 
114
128
 
115
129
  #下記TwitterのAPIキー、アクセスキーのため記載しておりません
@@ -130,6 +144,12 @@
130
144
 
131
145
 
132
146
 
147
+ # url変換に使用する正規表現
148
+
149
+ pattern = re.compile(r".*/file/./(.*)/.*") # <-------追加
150
+
151
+
152
+
133
153
  #メディアアップロードに使用するURL
134
154
 
135
155
  url_media = "https://upload.twitter.com/1.1/media/upload.json"
@@ -144,6 +164,28 @@
144
164
 
145
165
 
146
166
 
167
+ # Googleドライブ上のリンクを、twitter API等で直接取得できるurlに変換する関数 <-------追加
168
+
169
+ def convert_url(url):
170
+
171
+ a = re.search(pattern, url)
172
+
173
+ try:
174
+
175
+ return "https://drive.google.com/uc?export=view&id=%s" % a.group(1)
176
+
177
+ except (AttributeError, IndexError) as e:
178
+
179
+ # パターンマッチしない場合はメッセージを出して、渡されたurlをそのまま返す。
180
+
181
+ print("[%s]はパターンにマッチしないため、そのまま返します。" % url)
182
+
183
+ return url
184
+
185
+
186
+
187
+
188
+
147
189
  #jsonファイルからツイート本文と画像urlを取得
148
190
 
149
191
  def get_tweet_content(json_file_path):
@@ -382,6 +424,22 @@
382
424
 
383
425
 
384
426
 
427
+ ### 確認したい内容
428
+
429
+ ・convert_url(url)の引数urlはreturnされた「"https://drive.google.com/uc?export=view&id=%s" % a.group(1)」の値が記載されている認識でよろしいでしょうか。認識が間違っている場合、引数にはどの値(ファイルパス指定、JSONに記載したファイルパスの変数を指定など)を定義するべきでしょうか。
430
+
431
+ ・main()関数にはconvert_url(url)を呼び出す関数がないようですが、こちらの関数はどのように呼び出せばよろしいでしょうか。
432
+
433
+ ・main()関数に記載したjson_file_pathにjsonファイルのパスを直指定しているのですが、こちらはjsonファイル名を記載するのが正しいのでしょうか。
434
+
435
+ ・Pythonの実行方法として、定義された関数をmainから実行していくという認識であっているのでしょうか。※初歩的な質問で申し訳ございません
436
+
437
+
438
+
439
+
440
+
441
+
442
+
385
443
 
386
444
 
387
445
  長くなってしまい申し訳ございませんが、宜しくお願い致します。

1

元のエラーは解消され、新たに画像投稿が失敗してしまうエラーが発生したため、対所方法をご教示いただきたいです。

2020/11/19 02:55

投稿

unity_level1
unity_level1

スコア8

test CHANGED
@@ -1 +1 @@
1
- PythonからJSONファイルで画像付きツイートを自動化する方法
1
+ PythonからJSONファイルで画像付きツイートを自動化する方法
test CHANGED
@@ -10,6 +10,14 @@
10
10
 
11
11
 
12
12
 
13
+ 追記:
14
+
15
+ 追加でエラーが発生してしまったため、そちらも合わせてご教示いただけますと非常に助かります。
16
+
17
+ お手数ですがよろしくお願いいたします。
18
+
19
+
20
+
13
21
 
14
22
 
15
23
  ### 実行環境
@@ -300,4 +308,80 @@
300
308
 
301
309
 
302
310
 
311
+
312
+
313
+
314
+
315
+
316
+
317
+
318
+
319
+ ### 追加で発生したエラー
320
+
321
+
322
+
323
+ 上記のエラーの「NameError: name 'random' is not defined」は解消でき、ツイートもテキストツイートは成功しました。
324
+
325
+
326
+
327
+ ですが、画像ツイートが下記のエラーにより、失敗してしまいます。
328
+
329
+ お手数ですが、引き続きご教示いただけますと幸いです。
330
+
331
+ 宜しくお願い致します。
332
+
333
+
334
+
335
+
336
+
337
+ ■一回目実行
338
+
339
+ 画像投稿失敗ログ:
340
+
341
+ GoogleDriveをマウントしました→セッションがクラッシュしました
342
+
343
+
344
+
345
+ ↓ 下記ログが出力
346
+
347
+
348
+
349
+ Image upload failed: %s {"request":"/1.1/media/upload.json","error":"media type unrecognized."}
350
+
351
+ Auto Tweet Succeeded.
352
+
353
+
354
+
355
+
356
+
357
+ ■二回目実行
358
+
359
+ 一回目実行後再実行すると下記のエラーが発生再発します。
360
+
361
+
362
+
363
+ ---------------------------------------------------------------------------
364
+
365
+ NameError Traceback (most recent call last)
366
+
367
+ <ipython-input-1-0f1ead28e8c2> in <module>()
368
+
369
+ 1 if __name__ == '__main__':
370
+
371
+ ----> 2 main()
372
+
373
+
374
+
375
+ NameError: name 'main' is not defined
376
+
377
+
378
+
379
+
380
+
381
+
382
+
383
+
384
+
385
+
386
+
303
387
  長くなってしまい申し訳ございませんが、宜しくお願い致します。