Python WebAPI

Webアクセス

requests を事前にインストールする。

pip install requests

メソッドとフィールド

get(URL)

Webサイトにアクセスするためのresponseオブジェクトを返す。他にpost(URL)もある。

どちらも辞書を引数paramsに渡し、パラメータを指定可能。

responseオブジェクト

text取得した文字列
status_codeステータスコード
urlアクセスしたURL
encoding文字コード。'utf-8'などを指定。
content画像などバイナリデータ。
json()JSONに変換して取得

基本的な使い方

テキストを取得、表示

import requests

url = 'http://www.dicre.com/python/time.cgi'

r = requests.get(url)
r.encoding = 'utf-8' # 文字コード設定

print(r.text) # テキスト

画像ダウンロード

import requests

url = 'http://www.dicre.com/python/cat.jpg'

r = requests.get(url)

f = open("cat.jpg","wb")
f.write(r.content)
f.close()

JSONダウンロード例

http://www.dicre.com/python/time.cgi

import requests

url = 'http://www.dicre.com/python/time.cgi'

r = requests.get(url)

print(r.text) # テキスト

JSON

JavaScript Object Notation。JavaScriptの表記を元にしたオブジェクト表記法。

形式

オブジェクトの例。Pythonの辞書とほぼ同じ。

{"name":"田中","age":30}

配列の例。Pythonのリストとほぼ同じ。

[10,20,30]

オブジェクト配列の例

[
	{"name":"田中","age":30},
	{"name":"鈴木","age":30},
	{"name":"山本","age":30}
]

Pythonでの操作

JSON文字列をjson()メソッドで変換し、オブジェクトは辞書、配列はリストとして処理が出来る。

例:以下のJSONデータが変数resに入っていた時

{
	'date': "2020-08-26",
	'time': "12:32:50"
}
import requests

url = 'http://www.dicre.com/python/time.cgi'

r = requests.get(url)

res = r.json()

print(res["date"])
print(res["time"])

パラメータの使用

http://www.dicre.com/python/nibai.php?num=5

URLの後に付ける ?num=5 のようなパラメータは辞書としてgetオプションのparams引数で渡すことができる。

import requests

url = 'http://www.dicre.com/python/nibai.php'

params = {'num':5}

r = requests.get(url,params = params)

print("URL=",r.url) # URL
print(r.text) # テキスト

Web API

さまざまなサイトがAPIの提供を行っている

Web API:アクセスするとJSONでデータを返す

RANDOMCAT

randomcat

ランダムに猫の画像を返す

import requests

url = 'https://aws.random.cat/meow'
res = requests.get(url).json()
url = res['file']
print(url)

天気

※気象庁の非公開API

URL:
https://www.jma.go.jp/bosai/forecast/data/forecast/地域コード.json

※地域コード
http://www.jma.go.jp/bosai/common/const/area.json

熊本県の取得例

import requests

url = "https://www.jma.go.jp/bosai/forecast/data/forecast/430000.json"
res = requests.get(url).json()

天候の表示例

times = res[0]['timeSeries'][0]['timeDefines']
areas = res[0]['timeSeries'][0]['areas']
for area in res[0]['timeSeries'][0]['areas']:
    print(area['area']['name'])
    for i in range(3):
        print(times[i], area['weathers'][i])

気温

※気象庁の非公開API

URL:
https://www.jma.go.jp/bosai/amedas/data/map/年月日時分00.json

年月日時分は YYYYMMDDhhmm 形式

※観測所番号
https://www.jma.go.jp/bosai/amedas/const/amedastable.json

取得例

from datetime import datetime

now = datetime.now().strftime('%Y%m%d%H')

url = "https://www.jma.go.jp/bosai/amedas/data/map/" + now + "0000.json"

res = requests.get(url).json()

熊本の気温表示例

print(res['86141']['temp'])

iTunes

RSSフィードジェネレータ

import requests

url = 'https://rss.applemarketingtools.com/api/v2/jp/music/most-played/10/songs.json'
res = requests.get(url).json()
results = res['feed']['results']
songs = []
for result in results:
    title = result['name']
    artist = result['artistName']
    print(title,artist)

そのほかのWeb API

Twitter、Instagram、Amazon、楽天市場などが登録必要なWebAPIを提供している。

登録不要なAPI