3.食レポのAPIを使う - nsaku/xrepo-api-tutorial GitHub Wiki

ここでやること

  • 食レポのAPIを使ってデータを取得する方法を確認します。

食レポのAPIの詳細は、食レポの「ヘルプ」→「APIによる高度な利用」に詳しく記載 されています。

この項では、例として、「ダウンロードできるピークデータのZIPファイルの情報を取得する」というAPIを使って、pythonからの利用の仕方を確認します。

APIの確認

ブラウザで、下記のページにアクセスします。

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で表示しています。

pythonで扱えるデータになるように変更する

下記のように、最後に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で使えるデータ形式に落とすことが できるようになりました。

この基本さえできれば、あとは応用次第で色々な解析が可能になります。

⚠️ **GitHub.com Fallback** ⚠️