3.食レポのAPIを使う - nsaku/xrepo-api-tutorial GitHub Wiki
- 食レポのAPIを使ってデータを取得する方法を確認します。
食レポのAPIの詳細は、食レポの「ヘルプ」→「APIによる高度な利用」に詳しく記載 されています。
この項では、例として、「ダウンロードできるピークデータのZIPファイルの情報を取得する」というAPIを使って、pythonからの利用の仕方を確認します。
ブラウザで、下記のページにアクセスします。
http://metabolites.in/foods/api/dl-info-peaks/01026
下記のような結果がブラウザ上に表示されたと思います。
{"name":"01026_peaks.zip","size":2.530384}
このAPIは、食品番号「01026」の「こむぎ [パン類] 食パン」について、 ユーザーがダウンロードできるピーク情報が入ったzipファイルの、
- name: ファイル名
- size: ファイルサイズ(MB)
を返しています。
食レポのAPIは、結果を上記のような「json(ジェーソン)」と呼ばれるテキスト形式で返します。
※ブラウザによっては、上記URLにアクセスすると、「名前を付けて保存」を聞かれることが あります。適当なファイル名を付けた後でファイルを開くと、上記と同じ結果が記載されていることと思います。
「01026」の部分を、他の食品番号(例えば「01080」、玄米)に変更すると、その食品のファイルの情報が返ります。
http://metabolites.in/foods/api/dl-info-peaks/01080
{"name":"01080_peaks.zip","size":0.804933}
- 「test2.py」というファイルを作りましょう。
- IDLEで編集します。
※上記までの操作は、「2.」で確認できます。
以下の通りに記入します。
import requests
url = "http://metabolites.in/foods/api/dl-info-peaks/01026"
response = requests.get(url)
print( response.text )
- ファイルを保存して実行します。
============== RESTART: C:\Users\sakura\Desktop\python\test2.py ==============
{"name":"01026_peaks.zip","size":2.530384}
>>>
ブラウザで見た時と同じ結果が得られています。
※ requestsというモジュールがインストールされていないと、エラーになります。1.環境設定と確認に従ってrequestsモジュールをインストールしてください。
-
request.get( url )
で、HTTPアクセスした結果を得て、 -
response
に格納し、 - そのテキスト情報(
response.text
)を、print
で表示しています。
下記のように、最後に2行を追加して、プログラムを少し改変します。
import requests
url = "http://metabolites.in/foods/api/dl-info-peaks/01026"
response = requests.get(url)
print( response.text )
file_info = response.json() # 追加
print( file_info ) # 追加
※「#」文字以降のその行の文字は、pythonプログラムから無視され、ただの「コメント」になります。
上記のプログラムの最後の2行では、
-
response.json()
というメソッド(命令)を使って、json形式で書かれたテキストファイルを解析し、 - pythonで扱えるデータの形にしたものを、
file_info
に格納して、 -
file_info
のデータ内容をprint
で表示しています。
以下のようになれば成功です。
============== RESTART: C:\Users\sakura\Desktop\python\test2.py ==============
{"name":"01026_peaks.zip","size":2.530384}
{'name': '01026_peaks.zip', 'size': 2.530384}
>>>
さらにプログラムを改変して、files_info
に格納されているデータにアクセスしてみましょう。
下記のように、最後の2行を追加してみます。
import requests
url = "http://metabolites.in/foods/api/dl-info-peaks/01026"
response = requests.get(url)
print( response.text )
file_info = response.json()
print( file_info )
print( file_info["name"] ) # 追加
print( file_info["size"] ) # 追加
下記のような結果になれば成功です。
============== RESTART: C:\Users\sakura\Desktop\python\test2.py ==============
{"name":"01026_peaks.zip","size":2.530384}
{'name': '01026_peaks.zip', 'size': 2.530384}
01026_peaks.zip
2.530384
>>>
json形式では、
- 「項目名(キー)」とその「値」がコロンで区切られており、
- そのペアが複数ある場合は、カンマで区切られる
という形をしています。
この例では、「name」と「size」いう二つのキーがありました。
改造したpythonプログラムでは、
file_info["name"]
のような書き方で、「キー(name)」に対応する「値(01026_peaks.zip)」にアクセスしています。
print( file_info )
の結果をよく見ると、元のjsonテキストと微妙に異なることが分かります。 「name」などの文字列をくくるダブルクォーテーション「"」が、シングルクォーテーション「'」になっています。
print( response.text )
が、json形式そのものを表しているのに対し、
print( file_info )
は、pythonに格納されたデータの形を示しているという、微妙な違いがあるからです。
とにかく、食レポのAPIを使って、urlを指定することで、ネット越しにアクセスし、 データをjson形式で取得して、それをpythonで使えるデータ形式に落とすことが できるようになりました。
この基本さえできれば、あとは応用次第で色々な解析が可能になります。