質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.47%
Jupyter

Jupyter (旧IPython notebook)は、Notebook形式でドキュメント作成し、プログラムの記述・実行、その実行結果を記録するツールです。メモの作成や保存、共有、確認などもブラウザ上で行うことができます。

Twitter

Twitterは、140文字以内の「ツイート」と呼ばれる短文を投稿できるサービスです。Twitter上のほぼ全ての機能に対応するAPIが存在し、その関連サービスが多く公開されています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

2回答

950閲覧

pythonでTwitter上の加藤純一の写真を自動収集したい

jun_channel

総合スコア1

Jupyter

Jupyter (旧IPython notebook)は、Notebook形式でドキュメント作成し、プログラムの記述・実行、その実行結果を記録するツールです。メモの作成や保存、共有、確認などもブラウザ上で行うことができます。

Twitter

Twitterは、140文字以内の「ツイート」と呼ばれる短文を投稿できるサービスです。Twitter上のほぼ全ての機能に対応するAPIが存在し、その関連サービスが多く公開されています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2021/11/26 07:08

編集2021/11/26 07:20

こんにちは。
大学の研究で必要な画像をPythonを使ってTwitterから自動収集したく、試しに加藤純一の画像を集めるコードを書いたのですが、戻り値が上手く設定できていないのか、エラーが起きてしまいました。

使用しているエディターはjupyter notebookです。

Python

1from requests_oauthlib import OAuth1Session 2from time import sleep 3import urllib.request as req 4import json, os 5 6CK = 'ー--------' 7CS = 'ー--------' 8AT = 'ー--------' 9ATS = 'ー--------' 10 11def search_tweet(search_word): 12 url = 'https://api.twitter.com/1.1/search/tweets.json' 13 twitter = OAuth1Session(CK,CS,AT,ATS) 14 req = twitter.get(url,params = search_word) 15 16 if req.status_code == 200: 17 tweet = json.loads(req.text) 18 search_tweet = json.loads(req.text) 19 20 for tweet in search_tweet['statuses']: 21 print("(tweet id = " + tweet['id_str'] + ")") 22 print("-"*10) 23 tweet_id = tweet['id'] 24 return search_tweet,tweet_id 25 else: 26 print('ERROR:%d' % req.status_code) 27 28def save_img(tweet_json,save_dir): 29 if not os.path.exists(save_dir):os.makedirs(save_dir) 30 31 for tweet in tweet_json['statuses']: 32 name = tweet['user']['screen_name'] 33 date = tweet['created_at'] 34 date = date.replace(" +0000","") 35 date = date.replace("","-") 36 date = date.replace(":",",") 37 38 try: 39 media_list = tweet['entries']['media'] 40 for img in media_list: 41 img_url = img['media_url'] 42 path = save_dir + "/[" + str(name) + "]_" + str(date) + ".jpg" 43 print(path) 44 req.urlretrieve(img_url,path) 45 print("画像を保存しました",img_url) 46 print("-・"*30) 47 except Exception as e: 48 print("画像を保存できませんでした") 49 print("-・"*30) 50 51if __name__ == '__main__': 52 save_dir = "./for research image" 53 count = 3 54 tweet_id = 9999999999999999999 55 for i in range(count): 56 search_word = {'q' : "加藤純一 filter:images", 57 'count' : 1, 58 'result_type' : 'recent', 59 'max_id' : str(tweet_id-1), 60 'include_entities' : True 61 } 62 tweet_json, tweet_id = search_tweet(search_word) 63 save_img(tweet_json, save_dir) 64 if not i==count-1: sleep(10)

エラー個所は、下からの3行目の

Python

1tweet_json, tweet_id = search_tweet(search_word)

です。
エラー内容はcannot unpack non-iterable NoneType objectです。

エラーメッセージは
TypeError Traceback (most recent call last)
<ipython-input-18-eb01965726f7> in <module>
10 'include_entities' : True
11 }
---> 12 tweet_json, tweet_id = search_tweet(search_word)
13 save_img(tweet_json, save_dir)
14 if not i==count-1: sleep(10)

TypeError: cannot unpack non-iterable NoneType object

また、実行結果にERROR:403と出ました。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

y_waiwai

2021/11/26 07:16

エラーが出たなら、エラーメッセージを提示しましょう エラーメッセージは、いらぬ翻訳省略しないで、出たそのママをコピペで提示してください
jun_channel

2021/11/26 07:20

ありがとうございます!追記しました!
guest

回答2

0

詳しく読んでいませんが、

python

1 tweet_json, tweet_id = search_tweet(search_word) 2 save_img(tweet_json, save_dir) 3

を以下に変更すれば、動く可能性が大きいです。

python

1 search_result = search_tweet(search_word) 2 if search_result != None 3 tweet_json, tweet_id = search_tweet(search_word) 4 save_img(tweet_json, save_dir)

投稿2021/11/26 08:04

ppaul

総合スコア24666

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

def search_tweet(search_word):
の関数で、
if req.status_code == 200:
これが200ではない場合、この関数はなにを返すのでしょうか。

投稿2021/11/26 07:21

y_waiwai

総合スコア87782

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

jun_channel

2021/11/26 07:34

returnでprint('ERROR:%d' % req.status_code)と書いているので、こちらが返ってくるのだと思います。 実行結果にはERROR:403とでましたので、、、 ちなみに、参考としてこちらのページを使いました。https://gukoulog.com/2018/10/26/post-1327/
y_waiwai

2021/11/26 08:01

return は書かれてませんよ それでエラーが出てます
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.47%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問