2014年4月14日月曜日

【Google Apps Script】8. Yahoo!ニューストピックスAPIで最新の動向をキャッチする

多くの人がヤフーのトップページのニューストピックスから最新情報を得ていることと思います。私もそうです。できれば効率よく、このニュースを見れればと思うので、Google Apps ScriptからトピックスAPIを使って最新トピックスを引っぱり、好きな時間やタイミングで自動的にメールに届けるようにしたいと思います。



Yahoo! JAPANトップページのトピックス部分。日々の情報収集に欠かせませんね。一日に何度か見ていると思います。






まず、APIを使うためのアプリケーションIDを取得する必要がありますので、Yahoo!デベロッパーネットワークのページの「アプリケーションの管理」メニューから申請をしてください。










リクエストURLはこのようになります。
http://news.yahooapis.jp/NewsWebService/V2/topics?appid=<アプリケーションID>&pickupcategory=top

アプリケーションIDはご自身で取得したものをappid=の後に入れてください。最後のpickupcategory=topは、Yahoo! JAPANトップページのトピックスを表示するパラメータになります。これを「エンターテインメント」などカテゴリを指定したり、「地震」など特定の検索キーワードを指定することも可能です。

【サンプルコード】

サンプルコードです。前述のようにアプリケーションIDを挿入したURLをフェッチすることをお忘れなく。

実行するとこんな感じで8本の最新ニュースが更新されます。




使っているレスポンスフィールドは5つ。

  1. 【Category】〜トピックが所属するカテゴリ(国内、海外、経済、エンターテインメント、スポーツ、コンピュータ、サイエンス、地域のいずれか)です。
  2. 【Title】〜トピックの見出しです。ない場合は表示されません。
  3. 【Overview】〜話題の単位であるトピックについての数十文字の簡単な説明です。
  4. 【HeadlineId】〜トピックの見出し(Title)に対応するIDです。
  5. 【SmartphoneUrl】〜スマートフォン最適化ページのURLです。
トピックス毎のURLがなぜかどのフィールドも完全ではなかったので、SmartphoneUrlの後にHeadlineIdをアペンドすることで対応しました。

メール送信のスクリプトはいつもの通りです。Googleスプレッドシート内でトリガーを設定します。その際に必ず更新用のスクリプト(parseXml関数)とメール送信用スクリプト(sendemail関数)の両方のトリガーを設定することを忘れないでください。






2014年4月9日水曜日

【Google Apps Script】7. アマゾンの書籍ベストセラーランキングを取得する(JSON形式)

前々回、前回はXML形式のデータを取得する練習をしましたが、今回はJSON形式のデータを取得する練習をしようと思います。

アマゾンでお買い物をする人は多いと思いますが、アマゾンのショッピングカテゴリの売れ筋ランキングはすべてRSSで提供されていて、最も下の階層まで絞ることも可能です。


例えば【書籍】カテゴリを例にとります。

Amazonランキング - 本のベストセラー
http://www.amazon.co.jp/gp/bestsellers/books/ref=sv_b_3

こちらから好きな階層を選ぶことができます。私のビジネスに関係がある【本 > ビジネス・経済 > マーケティング・セールス】のランキングを毎日更新してメール送信するようなスクリプトを作ろうと思います。

今回ですが、Google Feed APIを使ってRSSをJSON形式で受け取って処理する方法を取ります。実際にやってみると、XMLのままで処理するよりも比較的楽に組むことができたと思います。

前回同様、関数は3つです。
onOpen(e)で独自メニューを追加します。
UrlFetchAppでJSONデータを取得後、今回初めて取り上げるjsonParseでパースし、スプレッドシートにデータを展開します。
sendemail()で、展開したデータを、指定したメールアドレスに送信します。

 【サンプルコード】 サンプルコードはこちらです。シート名は「Amazon」に変更してください。

そもそもGoogle Feed APIは、パブリックなatomやRSSフィードをJavaScriptを使って取得しようとした場合、Same-Origin Policyの制限によってドメインが違うサイトのデータは取得できないという問題を解決し、クライアント側で処理できるようにするための便利な仕組みです。結果の出力をXMLでもJSONでも選択できるので、JSON形式に変換するツール的に使えます。URLはこのようになります。
https://ajax.googleapis.com/ajax/services/feed/load?v=1.0&q=http://www.amazon.co.jp/gp/rss/bestsellers/books/492064/ref=zg_bs_492064_rsslink&num=10
上記リンクをクリックしてもらうとJSON形式になっているのがわかると思います。印象としてはXMLよりもJSONのほうがデータが軽いし、コードを組む際に属性の階層が深いデータを指定するのはJSONのほうがシンプルでずっとやりやすかったです。

最後の&num=10はオプションで、10件表示するという指定です。

実行すると、スプレッドシートでこのようにデータが展開されます。シンプルに、ランキング付きの書籍タイトルとURLだけの構成になっています。

AmazonアソシエイトのIDを持っていて、用途によってURLに反映させたい場合(データをアフィリエイト利用したいなど)はサンプルのようにsetvalueをする際に&tag='AmazonアソシエイトID'という形で引数を付与するようにします(今回はサンプルなので付けてみました)。

Googleのスプレッドシートのトリガー機能で実行時間を設定してメールを自動送信するようにします。アマゾンのフィードは1日の中でも何度も更新しています。私の場合は朝一でメールを受信するように設定しています。

変化が激しい昨今の広告・マーケティング業界なので、読むべき書籍のアンテナを張るのには便利なツールになっています。よかったら使ってみてください。

2014年4月7日月曜日

【Google Apps Script】6. ヤフーの検索ランキングを取得する(XML形式)

前回は英語ブログのRSSフィードを取得する練習をしました。今回はもう少しマーケティング活動に近いデータを取り扱ってみようと思います。

ヤフーが検索行動に関するデータをいくつか公開していますが、その中の「総数ランキング 総合(デイリー)」を取り上げたいと思います。これはヤフーで検索されるすべてのキーワードの日々のトップ20をランキングにしたものです。

Yahoo!検索データ 総数ランキング
http://searchranking.yahoo.co.jp/total_ranking/general/

取得方法は前回の英語ブログの取得の際に使ったスクリプトとほぼ同じなのでコピペ・編集で概ねいけますが、今回は一部のXMLデータ取得の際に名前空間を指定する必要があるので、少々難易度が上がっています。それ以外は同じです。

前回同様、関数は3つです。
onOpen(e)で独自メニューを追加します。
parseXml()で、XMLデータを取得、パースし、スプレッドシートにデータを展開します。
sendemail()で、展開したデータを、指定したメールアドレスに送信します。

【サンプルコード】
サンプルコードはこちらです。前述の通り、一部のXMLデータでrankingという名前空間を指定しているので、それを処理しないといけません。
var ranking = XmlService.getNamespace('ranking', 'http://searchranking.yahoo.co.jp/ns/ranking');
というコードを加えました。getChildメソッドで指定した属性データを取得する際に、オプションで名前空間名を指定すれば取得できるようになります。

このフィードでは親切に、前回順位と変動(トレンド)もデータで提供してくれているので、前回と最新の比較処理などが必要ありません。そのまま使うことにします。ただ、トレンドに関してはデータ上は"stay","new","down","up",と英語なので、一旦E列に展開し、スプレッドシート上のsubstitute関数を使ってD列に、"変化なし","新登場","下降","上昇"として変換して展開する処理を加えています。コードでこのあたりもやったほうがキレイだという意見もあるでしょうが、ここはスプレッドシートを併用するメリットを解説するためにもこうしました。

また、これもスプレッドシート上の機能を使って、条件付き書式で、"新登場"の場合はグリーン、"下降"の場合はレッド、"上昇"の場合はブルーにテキストカラーを変化させるようにしました。

メール送信機能は今回も加えました。私はこのデータは毎朝8:00に受信するようにトリガーを設定しています。上位5位までのキーワードはさほど変動はないですが、それ以下は新しいキーワードが入ってきやすいので、トレンドが把握できます。

また、今回もスプレッドシートのメニューに関数を加えているので必要な時にスプレッドシートの結果を更新したり、メールすることもできるようになっています。
ちなみにヤフーからRSSで提供されている検索データはいくつか種類があるので、好きなものを取り込んでみるのもいいと思います。
http://searchranking.yahoo.co.jp/rss/

以上です。RSSの取得については、もう何度かやっていきます。

2014年4月5日土曜日

【Google Apps Script】5. ブログのデータを取得する(XML形式)

今、シリコンバレーにきてまして、Google本社、Facebook本社に訪問しています。かなり刺激を受けてきたので、こちらのプロジェクトの意欲も高まっています。ということで、気分を高める意味も含め、今回はFacebook本社近くのカフェでこのブログを書いています。

そろそろ実践に入ろうと思います。ひとまずこのシリーズはマーケティングに役立つダッシュボードを作るのが目的なので、さまざまなデータを取得してGoogleスプレッドシートに展開することをこなしていこうと思います。

atom形式のブログRSSの最新データを取得し、GoogleスプレッドシートにタイトルとURLを展開します。そして、定期的に指定したメールに送信するというスクリプトを作りました。まずは英語の勉強に使うブログ(http://www.eigowithluke.com/)で練習です。

関数は3つです。
onOpen(e)は、Googleスプレッドシートのメニューに作成した関数を実行できる独自メニューを追加します。これは今後作成するスクリプトでも活用していきますので、いつでもコピペ利用ができるようにしておきます。

parseXml()は、RSSからXMLデータを取得、パースし、指定した属性の値を取り出し、スプレッドシートに展開します。

sendemail()は、スプレッドシートに展開したデータをコピーして、指定したメールアドレスに送信します。

サンプルコードはこちらです。特に編集しないと使えない箇所は1点だけ(宛先メールアドレスだけ指定してください)。そこだけを編集すれば、ご自身のGoogleスプレッドシートのエディターにコピペしてもらえれば使えるはずです。 細かくコメントアウトで解説をつけたので、なるべく解読しやすくしたつもりです。パースできる形式はXMLのみならずJSONでもありますが、JSONは別のサンプルで取り組みたいと思います。

すべてのコードを保存した後(実行する際に一度認証が入ります)は、スプレッドシートを開くたびに、onOpen(e)で指定した独自メニューが表示されます。


メニューのRetrieve Dataを選ぶとデータ取得が行われます(エディターから関数を実行することももちろん可能です)。
UrlFetchAppクラスを使うことで外部データの取得はかなり楽にできます。XmlServiceもアップグレードはかなりできることも増えたのでパースもより便利にできるようになりました。


Send Dataを選ぶとスプレッドシートに展開された部分をコピーして指定したメールアドレスにメッセージとして送信されます。






さて、Google Apps Scriptの便利なことの一つにトリガーを設定することができることです。エディターにあるメニューの「現在のプロジェクトのトリガー」を選ぶと、時間やアクションなどの条件に合致した際に関数を実行させることができます。僕の場合は「データ取得を毎月14日と28日の6-7時の間に実行し、その後7-8時の間に最新のデータをメールに送信する」と指定しています。

普通にRSSリーダー的に使うこともできますが、XMLで公開されている有益な外部データは多いので(API経由で取得するデータもXMLであることが多いです)、Google Apps Scriptでさらに自動化をすることで、マーケティング活動に役立つデータを収集することが可能です。これは今後取り上げていきます。今日の練習はここまで。