【挑戦】Python urllibでパラメータを付けてリクエスト【3日目】

昨日に引き続きPython学習3日目、今日で終われば、見事3日坊主です。

昨日は、実際にWEBサイトから少しデータを取ることが出来ました。

スポンサーリンク
スポンサー

この本に沿って進めています



URLにパラメータを付けて情報を取ってみる

任意のパラメータを付けてリクエストするコードを書いてみます。

サイトは、住所検索APIのエントリーポイント。

パラメータは2つ

パラメータ意味
fmtデータのフォーマットをjsonからxmlで指定
zn住所を知りたい郵便番号を指定
import urllib.request
import urllib.parse

API = "https://xxxxxxxxxxxxxxxxxxx/get.php"

#パラメータをURLエンコードする
values = {
'fmt':'xml',
'zn':'1500042'
}
params = urllib.parse.urlencode(values)

#リクエスト用のURLを生成
url = API + "?" + params
print("url=",url)

#ダウンロード
data = urllib.request.urlopen(url).read()
text = data.decode("utf-8")
print(text)

はい、実行!

じゃん

URLにパラメータを付けて情報を取る

サイトの中に住所録があって、郵便番号を入れると住所が返ってくるというAPIと理解しました。

150-0042を入れたら、渋谷区宇田川町が返ってきました。

解説

values の中に2つのパラメータを入れる。
‘fmt’:’xml’,
‘zn’:’1500042

params = urllib.parse.urlencode(values)
昨日の理解だと、urllibライブラリ、parseモジュール、urlencodeオブジェクト でエンコードして、paramsに入れる。

paramsの変数は何でも良いのかな?paramsパラメータスってことかな。

url = API + “?” + params
これは、APIにはURLが入っている。+「?」はURLにパラメータを付けるという意味。+さっき作ったパラメータス。
結果
url= https://xxxxxxxxxxxxxxxxxx.php?fmt=xml&zn=1500042
が1行目に表示されてる。

data = urllib.request.urlopen(url).read()
昨日使った構文。ファイルの中身をメモリに保存する。
いったん覚えておいてね、という感じ。

text = data.decode(“utf-8”)
メモリに入っているデータをエンコードします。

print(text)
表示します。

これくらいなら、なんとか読めるかも知れない。

応用

ネット上に公開されているAPIは結構ありました。

その中で今日作成してコードで応用できるものがあったので、調子に乗って作成しました。

緯度経度と日時をパラメータにセットしてAPIコールすると、星座の情報が返ってくるAPIです。

import urllib.request
import urllib.parse

API = "https://livlog.xyz/hoshimiru/constellation"

#パラメータをURLエンコードする
values = {
'lat':'35.862',
'lng':'139.645',
'date':'2013-10-31',
'hour':'0',
'min':'0',
'id':'1',
'disp':'off'
}
params = urllib.parse.urlencode(values)

#リクエスト用のURLを生成
url = API + "?" + params
print("url=",url)

#ダウンロード
data = urllib.request.urlopen(url).read()
text = data.decode("utf-8")
print(text)
星座情報のAPI

星をみるひと 星座情報 取得API
https://www.apibank.jp/ApiBank/api/detail?api_no=86&api_type=A

パラメータ一覧

パラメータ名パラメータタイプオプション説明
latStringN観測場所の経度
lngStringN観測場所の緯度
dateStringN観測場所の日付
hourNumberN観測場所の時
minNumberN観測場所の分
idNumberY星座ID
dispStringY水平線より下を表示 [値] on, off

失敗例

APIのURLの部分に、

〇 API = “https://livlog.xyz/hoshimiru/constellation”

× API = “http://www.hoshi-miru.com/api.html”

×のように書いてしまい、エラーになりました。

リンク先の説明をよく読んだら解決できましたが、注意が必要ですね。

まとめ

API用のURLとパラメータが分かれば、今日やった構文に当てはめると、サイトの情報が取れることが分かった。

パラメータ入力フォームを作って、結果をHTMLで生成できれば、なんちゃってアプリができると予想。

お急ぎの方はこちら。

応援お願いします
にほんブログ村 サラリーマン日記ブログ 勉強しているサラリーマンへ にほんブログ村 地域生活(街) 東京ブログ 江東区情報へ
スポンサーリンク
スポンサー

フォローする

スポンサーリンク
スポンサー