teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

2

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

2020/11/19 02:56

投稿

unity_level1
unity_level1

スコア8

title CHANGED
File without changes
body CHANGED
@@ -4,11 +4,17 @@
4
4
  当方プログラム初心者のため、Python、JSONの理解が及んでいないです。(本プログラムも理解できていない部分が結構あります)
5
5
  お手数ですが、お分かりになる方がおりましたら、ご教示いただけますと幸いです。
6
6
 
7
- 追記:
7
+ 追記(2020/11/18)
8
8
  追加でエラーが発生してしまったため、そちらも合わせてご教示いただけますと非常に助かります。
9
9
  お手数ですがよろしくお願いいたします。
10
10
 
11
+ 追記2(2020/11/19):
12
+ 確認したい内容とご教示いただきましたスクリプトをスクリプト内に追記させていただきましたので、お手数ですが、
13
+ ご教示いただけますと幸いです。
14
+ ※ご教示いただきましたスクリプトはそのまま記載しました。convert_url(url)のurlをJSONで定義したimg_urlやファイルのパスを直書きしたり試したのですが、
15
+ Image upload failedを解消することができませんでした。
11
16
 
17
+
12
18
  ### 実行環境
13
19
  ■Google Colaboratory
14
20
  ■JSON -ここにツイート内容、画像を定義
@@ -54,6 +60,7 @@
54
60
  from requests_oauthlib import OAuth1Session
55
61
  #urlを使用するためのモジュール
56
62
  import urllib.request
63
+ import re       # <-------追加
57
64
 
58
65
  #下記TwitterのAPIキー、アクセスキーのため記載しておりません
59
66
  CONSUMER_KEY = '****************************'
@@ -64,6 +71,9 @@
64
71
  #Twitterアクセスキーを変数へ格納
65
72
  twitter = OAuth1Session(CONSUMER_KEY,CONSUMER_SECRET,ACCESS_TOKEN,ACCESS_TOKEN_SECRET)
66
73
 
74
+ # url変換に使用する正規表現
75
+ pattern = re.compile(r".*/file/./(.*)/.*") # <-------追加
76
+
67
77
  #メディアアップロードに使用するURL
68
78
  url_media = "https://upload.twitter.com/1.1/media/upload.json"
69
79
 
@@ -71,6 +81,17 @@
71
81
  url_text = "https://api.twitter.com/1.1/statuses/update.json"
72
82
 
73
83
 
84
+ # Googleドライブ上のリンクを、twitter API等で直接取得できるurlに変換する関数 <-------追加
85
+ def convert_url(url):
86
+ a = re.search(pattern, url)
87
+ try:
88
+ return "https://drive.google.com/uc?export=view&id=%s" % a.group(1)
89
+ except (AttributeError, IndexError) as e:
90
+ # パターンマッチしない場合はメッセージを出して、渡されたurlをそのまま返す。
91
+ print("[%s]はパターンにマッチしないため、そのまま返します。" % url)
92
+ return url
93
+
94
+
74
95
  #jsonファイルからツイート本文と画像urlを取得
75
96
  def get_tweet_content(json_file_path):
76
97
  #テキストファイルを読み込む
@@ -190,5 +211,13 @@
190
211
 
191
212
 
192
213
 
214
+ ### 確認したい内容
215
+ ・convert_url(url)の引数urlはreturnされた「"https://drive.google.com/uc?export=view&id=%s" % a.group(1)」の値が記載されている認識でよろしいでしょうか。認識が間違っている場合、引数にはどの値(ファイルパス指定、JSONに記載したファイルパスの変数を指定など)を定義するべきでしょうか。
216
+ ・main()関数にはconvert_url(url)を呼び出す関数がないようですが、こちらの関数はどのように呼び出せばよろしいでしょうか。
217
+ ・main()関数に記載したjson_file_pathにjsonファイルのパスを直指定しているのですが、こちらはjsonファイル名を記載するのが正しいのでしょうか。
218
+ ・Pythonの実行方法として、定義された関数をmainから実行していくという認識であっているのでしょうか。※初歩的な質問で申し訳ございません
193
219
 
220
+
221
+
222
+
194
223
  長くなってしまい申し訳ございませんが、宜しくお願い致します。

1

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

2020/11/19 02:55

投稿

unity_level1
unity_level1

スコア8

title CHANGED
@@ -1,1 +1,1 @@
1
- PythonからJSONファイルで画像付きツイートを自動化する方法
1
+ PythonからJSONファイルで画像付きツイートを自動化する方法
body CHANGED
@@ -4,7 +4,11 @@
4
4
  当方プログラム初心者のため、Python、JSONの理解が及んでいないです。(本プログラムも理解できていない部分が結構あります)
5
5
  お手数ですが、お分かりになる方がおりましたら、ご教示いただけますと幸いです。
6
6
 
7
+ 追記:
8
+ 追加でエラーが発生してしまったため、そちらも合わせてご教示いただけますと非常に助かります。
9
+ お手数ですがよろしくお願いいたします。
7
10
 
11
+
8
12
  ### 実行環境
9
13
  ■Google Colaboratory
10
14
  ■JSON -ここにツイート内容、画像を定義
@@ -149,4 +153,42 @@
149
153
 
150
154
 
151
155
 
156
+
157
+
158
+
159
+
160
+ ### 追加で発生したエラー
161
+
162
+ 上記のエラーの「NameError: name 'random' is not defined」は解消でき、ツイートもテキストツイートは成功しました。
163
+
164
+ ですが、画像ツイートが下記のエラーにより、失敗してしまいます。
165
+ お手数ですが、引き続きご教示いただけますと幸いです。
166
+ 宜しくお願い致します。
167
+
168
+
169
+ ■一回目実行
170
+ 画像投稿失敗ログ:
171
+ GoogleDriveをマウントしました→セッションがクラッシュしました
172
+
173
+ ↓ 下記ログが出力
174
+
175
+ Image upload failed: %s {"request":"/1.1/media/upload.json","error":"media type unrecognized."}
176
+ Auto Tweet Succeeded.
177
+
178
+
179
+ ■二回目実行
180
+ 一回目実行後再実行すると下記のエラーが発生再発します。
181
+
182
+ ---------------------------------------------------------------------------
183
+ NameError Traceback (most recent call last)
184
+ <ipython-input-1-0f1ead28e8c2> in <module>()
185
+ 1 if __name__ == '__main__':
186
+ ----> 2 main()
187
+
188
+ NameError: name 'main' is not defined
189
+
190
+
191
+
192
+
193
+
152
194
  長くなってしまい申し訳ございませんが、宜しくお願い致します。