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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

1回答

344閲覧

flickr 画像のメタデータをtxtファイルに抽出

退会済みユーザー

退会済みユーザー

総合スコア0

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2018/10/04 04:06

前提・実現したいこと

flickrの画像のメタデータをtxtファイルに抽出したいのですが、エラーが出てしまいます

発生している問題・エラーメッセージ

Traceback (most recent call last): File "geo-1.py", line 53, in <module> pprint(photos) File "C:\Users\AppData\Local\Programs\Python\Python36-32\lib\pprint. py", line 53, in pprint printer.pprint(object) File "C:\Users\AppData\Local\Programs\Python\Python36-32\lib\pprint. py", line 139, in pprint self._format(object, self._stream, 0, 0, {}, 0) File "C:\Users\AppData\Local\Programs\Python\Python36-32\lib\pprint. py", line 167, in _format p(self, object, stream, indent, allowance, context, level + 1) File "C:\Users\AppData\Local\Programs\Python\Python36-32\lib\pprint. py", line 189, in _pprint_dict context, level) File "C:\Users\AppData\Local\Programs\Python\Python36-32\lib\pprint. py", line 346, in _format_dict_items context, level) File "C:\Users\AppData\Local\Programs\Python\Python36-32\lib\pprint. py", line 167, in _format p(self, object, stream, indent, allowance, context, level + 1) File "C:\Users\AppData\Local\Programs\Python\Python36-32\lib\pprint. py", line 210, in _pprint_list context, level) File "C:\Users\AppData\Local\Programs\Python\Python36-32\lib\pprint. py", line 389, in _format_items context, level) File "C:\Users\AppData\Local\Programs\Python\Python36-32\lib\pprint. py", line 167, in _format p(self, object, stream, indent, allowance, context, level + 1) File "C:\Users\AppData\Local\Programs\Python\Python36-32\lib\pprint. py", line 189, in _pprint_dict context, level) File "C:\Users\AppData\Local\Programs\Python\Python36-32\lib\pprint. py", line 346, in _format_dict_items context, level) File "C:\Users\AppData\Local\Programs\Python\Python36-32\lib\pprint. py", line 176, in _format stream.write(rep) UnicodeEncodeError: 'cp932' codec can't encode character '\xe9' in position 15: illegal multibyte sequence

該当のソースコード

python

1import os 2 3import time 4import traceback 5 6import flickrapi 7from urllib.request import urlretrieve 8 9import sys 10from retry import retry 11from pprint import pprint 12 13flickr_api_key = "" 14secret_key = "" 15 16keyword = sys.argv[1] 17 18 19@retry() 20def get_photos(url, filepath): 21 urlretrieve(url, filepath) 22 time.sleep(1) 23 24 25if __name__ == '__main__': 26 27 flicker = flickrapi.FlickrAPI(flickr_api_key, secret_key, format='parsed-json') 28 response = flicker.photos.search( 29 text=keyword, 30 media='photos', 31 sort='relevance', 32 safe_search=1, 33 has_geo=1, 34 extras='url_q,license,geo' 35 ) 36 photos = response['photos'] 37 38 try: 39 if not os.path.exists('./image-data/' + keyword): 40 os.mkdir('./image-data/' + keyword) 41 42 for photo in photos['photo']: 43 url_q = photo['url_q'] 44 filepath = './image-data/' + keyword + '/' + photo['id'] + '.jpg' 45 get_photos(url_q, filepath) 46 47 except Exception as e: 48 traceback.print_exc() 49 50 photos = response['photos'] 51 pprint(photos)

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

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

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

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

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

guest

回答1

0

ベストアンサー

API が返してくるのは json オブジェクトなので、.json ファイルとして保存しましょう。

python

1import os 2import traceback 3import time 4import sys 5import json 6from urllib.request import urlretrieve 7 8import flickrapi 9 10# API 設定 11flickr_api_key = '' 12secret_key = '' 13 14 15if __name__ == '__main__': 16 keyword = sys.argv[1] 17 18 flicker = flickrapi.FlickrAPI( 19 flickr_api_key, secret_key, format='parsed-json') 20 21 print('accessing... ') 22 response = flicker.photos.search( 23 text=keyword, 24 media='photos', 25 sort='relevance', 26 safe_search=1, 27 has_geo=1, 28 extras='url_q,license,geo') 29 30 31 photos = response['photos'] 32 try: 33 out_dirpath = os.path.join('image_data', keyword) 34 os.makedirs(out_dirpath, exist_ok=True) 35 36 for photo in photos['photo']: 37 url = photo['url_q'] 38 out_path = os.path.join(out_dirpath, photo['id'] + '.jpg') 39 40 print('getting image...', url) 41 urlretrieve(url, out_path) 42 43 time.sleep(1) 44 45 except Exception as e: 46 traceback.print_exc() 47 48 with open('photo_{}.json'.format(keyword), 'w') as f: 49 json.dump(photos, f, sort_keys=True, indent=4)

投稿2018/10/04 06:34

tiitoi

総合スコア21956

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

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

退会済みユーザー

退会済みユーザー

2018/10/04 10:45

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問