【python】Colaboratoryでのweb API その1~Yahoo! ショッピング~【win10】

Colaboratoryのおかげで、勤務先でもちょいちょいといじったりできるのがありがたいですね(*’ω’*)

なんといっても環境を整える(インストール等)する必要がないので。

会社のPCは色々と制限が多いですからね~…。

もちろん業務に活用できるように(主な目的は手動作業を半自動化)試行錯誤中。

そんな中でAPIを使ってのデータの取り扱いを試してみていたので備忘録。

【python】Colaboratoryでのファイル扱い~import モジュール~【win10】
ということで、前回のドライブのマウントに続いて引っ掛かったモジュールについて。 教本に載っているものをColaboratory...
スポンサーリンク

Yahoo! ショッピングのランキング取得

手軽に試すには何がいいのかなと考えて、Yahooにしてみました(*’ω’*)

https://developer.yahoo.co.jp/sitemap/

API利用するためには「Yahoo! JAPAN ID取得」「アプリケーションの登録」が必要です
https://developer.yahoo.co.jp/start/

ここではショッピングでのカテゴリランキング取得をしてみたいと思います!

https://developer.yahoo.co.jp/webapi/shopping/shopping/v1/categoryranking.html

リクエストURLやパラメータの確認

まずは、データを取得する際のリクエストURLをチェック。
リクエストURL
  • XML
    https://shopping.yahooapis.jp/ShoppingWebService/V1/categoryRanking
  • PHPserialize
    https://shopping.yahooapis.jp/ShoppingWebService/V1/php/categoryRanking
  • JSONP
    https://shopping.yahooapis.jp/ShoppingWebService/V1/json/categoryRanking

どんな感じ(プログラム)でデータを処理していくのかによって選択肢が変わるわけですが、ここではJSON形式で取得したいと思います。

つぎにパラメータ


(ページより引用転載しております)

この中で必須になるのが

  • appid:アプリケーションID(アプリケーション登録した際に表示された英数字混合の文字)

あと目的のランキングを取得するために

  • category_id:カテゴリIdを指定して使用する(指定のない場合な全カテゴリからのランキング)

この辺りで組んでみたいとおもいます(*’ω’*)

サンプルリクエストURLを作ってみる

ここではスマホ本体のランキングをゲットしてみます。

まず、スマホ本体のカテゴリIDをチェックしましょう。

該当するページをヤフーショッピングで開いてみます。

URLをみてみると

https://shopping.yahoo.co.jp/category/2502/38338/list?sc_i=shp_pc_cate-rcmd-2502_mdSideChildCategory_38338

となっていました。

この中でカテゴリIDとなるのが「2502」と「38338」

  • 2502:「スマホ、タブレット、パソコン」
  • 38338:「スマホ本体」

となっているので、今回は「38338」を使います。

では、リクエストパラメータの下に記載されているサンプルURLを参考に以下のURLを作成してみます。

※アプリケーションIDの部分はそれぞれ取得したIDに書き換えてくださいね。

https://shopping.yahooapis.jp/ShoppingWebService/V1/categoryRanking?appid=<あなたのアプリケーションID>&category_id=38338

これをブラウザで確かめてみると

情報が取得…おっと、xml形式のままでしたね。URLをjsonタイプに変更します。

https://shopping.yahooapis.jp/ShoppingWebService/V1/json/categoryRanking?appid=<あなたのアプリケーションID>&category_id=38338

むしろ分かりにくい感じになってしまいました(;´・ω・)

ま、でも変換はpyhonでできるので、取得できることが確認できればこれでOKです。

Colaboratoryで取得表示してみる

いよいよ本題(コードはこちらからダウンロードできます)。

今回APIをつかうにあたって「requests」というのをインポートします。

正確なモノは調べてみてください…簡単にイメージを伝えると「requestsをインポートするとweb通信ができるようになる」って感じです(かなり大雑把ですがw)

さらに、jsonでの表示を綺麗にしたいので「pprint」、jsonファイルを読み書きするように「json」もインポートしておきます。

リクエストURLを変数に代入、ついでにパラメータも変数に入れておきます。

  • url:リクエストURL
  • api_id:アプリケーションID
  • category_num:カテゴリID
  • offset_num:0(ゼロにすることで1位から取得)

準備はこれでOK。

さっそくリクエストしてみたいと思います。それにはrequests.get()を使います。

書き方としては、

response = requests.get(url, params = {‘appid’:api_id, ‘category_id’:category_num, ‘offset’:offset_num})

urlを指定し、その後ろにパラメータを書いてあげます。

パラメータは「params」の辞書形式で記述してあげれば大丈夫です。

それぞれに対応する変数を設定してあげます(appidの場合はapi_idといった具合に)。

※appidやcategory_idなどはyahooのページに記載されていたパラメータの記述通りにしてくださいね(*’ω’*)

リクエストに対して戻ってきた情報はresponseに格納されます。

jsonデータはresponse.json()に入っているので

json_data = response.json()

json_dataに格納します。

どんな感じになっているのかをpprintしてチェックしてみます。

pprint.pprint(response.json())

※pprintについては調べてみてくださいね~。

ここまでで実行してみると…

JSON形式でランキングがバッチリ取得できてますね(*’ω’*)

あとはこれを利用するようにJSON形式としてファイル保存しておきましょう。

with open(‘download.json’, ‘w’) as f:
json.dump(json_data, f, ensure_ascii=False, indent=4)

json.dump()でJSON形式としてのファイル書き込みをします。

再び実行すると…

ファイルが作成されました。

※表示が変わらない場合は「更新」をクリックしてみてくださいね

これを右クリックしてダウンロードすれば、ローカルにも保存できますよ。

中身の確認は各自してみてください~。

まとめ

思った以上に簡単にできたんじゃないでしょうか?

基礎的な部分とはいえ、さくっと情報取得できちゃうプログラムが組めるのは時短になります。

表示の仕方、データの保存形式など工夫できる部分はまだまだいっぱいありますが、検索してみれば説明しているサイトがいっぱい見つかるのもpythonのいいところかもしれませんね。

是非チャレンジしてみてください。

参考になれば幸いです!