新刊書籍がリリースされたらLINEへ自動通知するDjangoアプリを開発しよう【前編】
この技術ノートでは、Pythonをつかって楽天ブックスから自分が気になっているカテゴリの書籍情報を自動取得する方法について解説していきます。
なお、以下の後編チュートリアルでは、本技術ノートで学んだことを応用して、Djangoアプリへの組み込みを行っていきますので、しっかりと基礎を身に着けていきましょう。
なお、上記の後編ノートまで終えると、以下のようなデモサイトを構築できるようになります。
なお、本チュートリアルをご購入いただくと、解説動画とサンプルコードファイルを参照、ダウンロードいただけます。
解説動画のサンプル
【本技術ノートの目次】
・この技術チュートリアルを通してできるようになること
・対象者
・サポート体制
・開発環境
・Pythonスクレイピングの基礎
・楽天APIを使って書籍情報を自動取得
この技術チュートリアルを通してできるようになること
①pythonスクレイピングの基礎部分が理解できるようになる。
②楽天APIを使った楽天商品情報の自動取得ができるようになる。
対象者
このチュートリアルのおすすめ対象者は、こんな人です。
1. Pythonの基礎構文がわかる人。
2. python入門者、またはチュートリアルはやったけどちょっとした応用事例を学びたい人。
4. Djangoに興味がある人。
5.書籍情報をWEBで一元管理したり、新刊がリリースされたら自動でLINE通知を受け取りたい方。
サポート体制
本記事に関する質問はいつでも受け付けています。
以下のいづれかの方法でお問い合わせいただければ返信致します。
・TwitterID「@shinya_hd」にDM
・問い合わせサイトから質問
※業務都合上返信が遅れる場合があります。
開発環境
Windows10/Anaconda(python3.x)
※なお、本チュートリアルはPython3.6で動作確認済みです。
※ブラウザはChrome推奨です。
(IEでは画面崩れが発生するケースがあります)
Pythonスクレイピングの基礎
まず最初に、pythonのurllibを使ったスクレイピングの基礎について解説します。
urllib は URL を扱う幾つかのモジュールを集めたpythonの標準パッケージです。
Anacondaプロンプトを起動したら「python」と打ち込み、Pythonコードを実行できる状態にしましょう。
※下図の画面が起動していればOKです。
まず、以下のコードで必要なモジュールをインポートします。
import urllib.request
urllib.requestは、URL を開くための機能を提供してくれるものです。
■WEBページの情報をテキストファイルとして保存
まず、手始めにWEBページの情報をスクレイピングしてみましょう。
今回は、以下のPythonドキュメントページの情報を取得してみます。
やることは「たったの2つ」です。
以下の2行のコードを実行してみてください。
url = "https://docs.python.jp/3/library/urllib.html"
urllib.request.urlretrieve(url, r"C:\temp\test.txt")
実行が完了すると「c:\temp\test.txt」ファイルが生成されます。
中身を見ると、以下のように「https://docs.python.jp/3/library/urllib.html」
のページ内容の情報がすべて取得できていることが確認できます。
【コードの解説】
まず、1行目でアクセスするURLの情報をurl変数に格納します。
url = "https://docs.python.jp/3/library/urllib.html"
最後に2行目で、urllib.request.urlretrieveを使って指定したURLの情報をファイルに保存します。
urllib.request.urlretrieve(url, r"C:\temp\test.txt")
urllib.request.urlretrieveは、以下のような使い方をします。
urllib.request.urlretrieve([アクセスするURL], [保存するファイルパス])
これで、指定したURLの全情報をスクレイピングで取得することができます。
ケースにもよりますが、「スクレイピングはそんなに難しくない!」というところを体験頂けたかなと思います。
スクレイピングには様々なメソッドがあり、もっと複雑なこともできるのですが、今回は初心者の方にもとっつきやすいようにAPIを使って楽天の書籍情報を取得する方法を解説していきます。
■楽天APIを使って書籍情報を自動取得
楽天の書籍情報を自動取得するには、指定のURLにアクセスして、取得したHTMLの情報から取得したい情報が格納されている場所を特定してプログラムコードを書いていく方法もありますが、HTMLの要素を探したり、ページを遷移させたり等いろいろこと考慮する必要があります。
これはこれで、スクレイピングの勉強になるのでよいのですが、今回は入門者向けにもっと簡単に実装できる方法で実装していきたいと思います。
それは、「楽天が公開しているAPI」を利用する方法です。
楽天APIとは、楽天の商品データや楽天のお買い物かごなどの機能を開発者向けに公開しているデータ連携機能です。
楽天APIは使い方が決まっていて、決められたルールに従ってリクエストを投げると、対応する楽天商品等のデータがレスポンスとして返ってくるという大変便利な機能です。
通常のスクレイピングに比べて、ルールに従いリクエストを投げてあげればほしい情報が返ってくるのでとっても簡単です。
なお、楽天APIの詳細は以下のリンク先ページにいろいろ記載してありますので、興味のある方はいろいろ確認してみてください。
まず最初に、楽天APIの利用例を1つ解説します。
例えば「楽天ブックス書籍検索API 」を使ってタイトルに「ディープラーニング」というワードが含まれる書籍情報を取得するには、以下のようなリクエストをなげればOKです。
https://app.rakuten.co.jp/services/api/BooksBook/Search/20170404?applicationId=<アプリケーションID&format=json&title=%E3%83%87%E3%82%A3%E3%83%BC%E3%83%97%E3%83%A9%E3%83%BC%E3%83%8B%E3%83%B3%E3%82%B0'
ちょっと長いですが、リクエストの投げ方は以下のようになっています。
https~Searchまでは固定値になっています。
https://app.rakuten.co.jp/services/api/BooksBook/Search
次の以下の部分はAPIのバージョン情報です。
/20170404?
以下のページにアクセスすると、楽天ブックス書籍検索APIの説明が記載されていますが、2019/3/3時点では「楽天ブックス書籍検索API (version:2017-04-04)」と掲載されていて、このバージョン情報をリクエストに含めることになっています。
残りの以下の部分ですが、
?applicationId=<アプリケーションID>&format=json&title=<キーワード>
applicationId=<アプリケーションID> ⇒発行した楽天のアプリIDを指定
format = <フォーマット> ⇒戻り値の形式を指定(jsonかxml)
title=<タイトル> ⇒検索したいキーワードを指定
楽天APIを使ってHTTPリクエストを投げると以下のような情報が返ってきます。
(以下はタイトルに「ディープラーニング」が含まれる書籍情報をHTTPリクエストとして投げた結果例です)
>>> data
{'count': 38, 'page': 1, 'first': 1, 'last': 30, 'hits': 30, 'carrier': 0,
'pageCount': 2, 'Items': [{'Item': {'title': 'ゼロから作るDeep Learning',
'titleKana': 'ゼロカラツクルディープラーニング', 'subTitle': 'Pythonで学ぶディープ
ラーニングの理論と実装', 'subTitleKana': 'パイソンデマナブディープラーニングノリロントジ
ッソウ', 'seriesName': '', 'seriesNameKana': '', 'contents': '', 'author':
'斎藤 康毅', 'authorKana': 'サイトウ コウキ', 'publisherName': 'オライリー・ジャパン'
, 'size': '単行本', 'isbn': '9784873117584', 'itemCaption': '作って学ぶ。手で覚
える。ディープラーニングを理解するための最善の方法は、ディープラーニングをゼロから実装すること
です。', 'salesDate': '2016年09月24日', 'itemPrice': 3672, 'listPrice': 0,
'discountRate': 0, 'discountPrice': 0, 'itemUrl': 'https://books.rakuten.
co.jp/rb/14424645/', 'affiliateUrl': '', 'smallImageUrl': 'https://thumbn
ail.image.rakuten.co.jp/@0_mall/book/cabinet/7584/9784873117584.jpg?_ex=6
4x64', 'mediumImageUrl': 'https://thumbnail.image.rakuten.co.jp/@0_mall/b
ook/cabinet/7584/9784873117584.jpg?_ex=120x120', 'largeImageUrl': 'https:
//thumbnail.image.rakuten.co.jp/@0_mall/book/cabinet/7584/9784873117584.
jpg?_ex=200x200', 'chirayomiUrl': '', 'availability': '1', 'postageFlag'
: 2, 'limitedFlag': 0, 'reviewCount': 39, 'reviewAverage': '4.51', 'book
sGenreId': '001005017'}}, {'Item': {'title': '深層学習教 科書 ディープラーニング
G検定(ジェネラリスト) 公式テキスト', 'titleKana': 'シンソウガクシュウキョウカショディ
ープラーニングギーケンテイジェネラリストコウシキテキスト', 'subTitle': '', 'subTitleKa
na': '', 'seriesName': 'EXAMPRESS', 'seriesNameKana': 'エグザムプレス', 'con
tents': '', 'author': '一般社団法人日本デ ィープラーニング協会/浅川 伸一', 'authorK
ana': 'ニホンディープラーニングキョウカイ/アサカワ シンイチ', 'publisherName':
ここから必要な情報を取得していきます。
一見難しそうに見えますが、あるルールに従って情報が並んでいるので簡単に欲しい情報(書籍のタイトル、値段、評価など)が取得できます。
それでは、実際に楽天APIを使ってみましょう。
楽天APIキーの発行手順
まずは、以下の楽天Developerサイトにアクセスします。
「アプリIDの発行」ボタンを押しましょう。
楽天のIDとパスワードを入力してログオンします。
アプリ新規作成フォームが表示されるので以下の情報を入力します。
アプリ名:何でもいいです(例:書籍情報アプリ)
アプリURL:自分のサイトのURLなど
楽天ウェブサービス・楽天APIを知ったきっかけは何ですか?
→適当でOK
上記を入力したら表示された「認証番号」を入力して「規約に同意して新規アプリを作成」ボタンを押します。
上記画面が表示されればOKです。
画面下のほうに行くと、各種ID情報が表示されるので、一番上の「アプリID]のキーをどこかにコピーして控えておいてください。
以上で、楽天APIを利用するために必要なアプリIDの取得が完了しました。
楽天APIを使って書籍情報を取得してみましょう
今回は、タイトルに「ディープラーニング」という文字列が含まれる書籍情報を取得してみたいと思います。
主にITテクノロジー系に興味があります。 【現在興味があるもの】 python、Django,統計学、機械学習、ディープラーニングなど。 技術系ブログもやってます。 https://sinyblog.com/