プログラミングメカブログ

Adults cling to the past, Children want to escape to the future

プログラミングメカブログ

Adults cling to the past, Children want to escape to the future

9月

21

webスクレイピングでMoto360の更新情報をチェック

  • POSTED BY 小谷松 丈樹 IN 創作
  • No Comments

Moto360

moto-360-smartwatch-580-90
9月5日、丸い文字盤のAndroid Wearスマートウォッチ「Moto360」が海外で発売開始となりましたが、
日本では、Google store で「お住まいの国ではご利用いただけません。」
とのことで、まだ買えないという状況が続いています。
心待ちにしていた私としては、日本で発売開始したらすぐ買ってやる!という意気込み。

そこで・・・

目標

Moto360の発売開始を検知しよう!

主要技術

  • PHP
  • webスクレイピング
  • crontab
  • シェルスクリプト

設計

https://play.google.com/store/devices/details?id=motorola_moto_360_leather_black
上記サイトの情報を定期的に取得して、更新されていたら通知する

実装

スクレイピングの実装

simplexml dom parser
HTMLのDOM操作をjQueryのように扱う事が出来るプラグインです。
下記は公式のクイックスタートガイドです。これは使いやすくていいですね。

file_get_htmlでHTMLを取得、必要な部分を絞り込んで保存。
保存した情報と違っていれば更新があったと見られますね。

robots.txt

スクレイピングの対象となるサーバのrobots.txtを必ず確認し、
それに則したクローリングを行わなければなりません。
過剰な頻度や、クローリング禁止ページにクローリングをかけていると怒られますので。

と言う事で、play.google.com の robots.txt を確認します。
https://play.google.com/robots.txt

スクリーンショット 2014-09-21 16.46.38
今回の対象となる /store/devices/ 以下に関しては、クローリングをかけても問題無いようです。
まあ製品の販売ページなので、クローリングできない訳も無く。
とりあえず1日数回ほどの頻度で回すことにしましょう。

PHP実装

スクリーンショット 2014-09-21 14.58.59
HTMLを眺めてみた所、”div.inventory-info” のテキストを取得するのが良さそう!

$argv[1] で、IDを変えれば別の製品情報もクローリングできる様にしてみました。
php -f run.php "$@"
実行シェルの方に上記 “$@” を入れておくと、PHPの方でも引数を受け取れますね。
シェルの実行時に引数でMoto360の製品IDを指定して、クローリングを実行!

_人人人人人人人_
> 突然の英語 <
 ̄Y^Y^Y^Y^Y^Y ̄

言語毎に表示を返るために一旦英語版のHTMLを出力し、
言語パック的な物を後から読み込んで表示を変えているようですね。

色々探ってみて、URLパラメータに hl=ja を付けると日本語版のテキストになるのを発見したのですが、
$html = file_get_html('https://play.google.com/store/devices/details?id='.$argv[1].'&hl=ja');

何だこのテキスト!?
これ、このまま実装してもうまく行く気がしませんね・・・

別の観点から

販売中の製品のHTMLとどこが違うか、Samsung Gear LiveのHTMLと比較してみましょう。

  • Moto360
    スクリーンショット 2014-09-21 18.01.02
  • Samsung Gear Live
    スクリーンショット 2014-09-21 18.04.30

なんか色々違う!
販売状態になる、あるいはウィッシュリスト追加機能が実装されれば、
button要素の数が増える、という認識で作ってみよう!

上記で、実行。

Moto360が1・・・だと・・・!?
HTMLを見てみると、
スクリーンショット 2014-09-21 18.19.58
ウィッシュリストボタン、隠されてるんですねぇ〜。これはぐぬぬ。
ともあれ、この数が変わった事を通知できれば目標達成ですね。
postfixをインストールして、mb_send_mail()で通知。

0 */6 * * * /bin/sh ~/cron.d/crawl.sh samsung_gear_live_black > ~/cron.d/crawl/cron.log 2>$1
crontabに設定して、完成!

メールが待ち遠しい!!

Tags :

コメントを残す

Please type the characters of this captcha image in the input box

Please type the characters of this captcha image in the input box