Yahoo!ニューストピックスAPIで最新の動向をキャッチする多くの人がヤフーのトップページのニューストピックスから最新情報を得ていることと思います。ScriptからトピックスAPIを使って最新トピックスを引っぱり、好きな時間やタイミングで自動的にメールに届けるようにしたいと思います。JAPANトップページのトピックス部分。日々の情報収集に欠かせませんね。一日に何度か見ていると思います。APIを使うためのアプリケーションIDを取得する必要がありますので、Yahoo!デベロッパーネットワークのページの「アプリケーションの管理」メニューから申請をしてください。リクエストURLはこのようになります。http://news.yahooapis.jp/NewsWebService/V2/topics?appid=<アプリケーションID>&pickupcategory=topアプリケーションIDはご自身で取得したものをappid=の後に入れてください。JAPANトップページのトピックスを表示するパラメータになります。これを「エンターテインメント」などカテゴリを指定したり、「地震」など特定の検索キーワードを指定することも可能です。【サンプルコード】サンプルコードです。前述のようにアプリケーションIDを挿入したURLをフェッチすることをお忘れなく。実行するとこんな感じで8本の最新ニュースが更新されます。使っているレスポンスフィールドは5つ。エンターテインメント、スポーツ、コンピュータ、サイエンス、地域のいずれか)です。【Title】〜トピックの見出しです。ない場合は表示されません。【Overview】〜話題の単位であるトピックについての数十文字の簡単な説明です。【HeadlineId】〜トピックの見出し(Title)に対応するIDです。【SmartphoneUrl】〜スマートフォン最適化ページのURLです。トピックス毎のURLがなぜかどのフィールドも完全ではなかったので、SmartphoneUrlの後にHeadlineIdをアペンドすることで対応しました。メール送信のスクリプトはいつもの通りです。Googleスプレッドシート内でトリガーを設定します。その際に必ず更新用のスクリプト(parseXml関数)とメール送信用スクリプト(sendemail関数)の両方のトリガーを設定することを忘れないでください。アマゾンの書籍ベストセラーランキングを取得する(JSON形式)前々回、前回はXML形式のデータを取得する練習をしましたが、今回はJSON形式のデータを取得する練習をしようと思います。アマゾンでお買い物をする人は多いと思いますが、アマゾンのショッピングカテゴリの売れ筋ランキングはすべてRSSで提供されていて、最も下の階層まで絞ることも可能です。【書籍】カテゴリを例にとります。本のベストセラーhttp://www.amazon.co.jp/gp/bestsellers/books/ref=sv_b_3こちらから好きな階層を選ぶことができます。マーケティング・セールス】のランキングを毎日更新してメール送信するようなスクリプトを作ろうと思います。APIを使ってRSSをJSON形式で受け取って処理する方法を取ります。実際にやってみると、XMLのままで処理するよりも比較的楽に組むことができたと思います。前回同様、関数は3つです。onOpen(e)で独自メニューを追加します。UrlFetchAppでJSONデータを取得後、今回初めて取り上げるjsonParseでパースし、スプレッドシートにデータを展開します。sendemail()で、展開したデータを、指定したメールアドレスに送信します。サンプルコードはこちらです。シート名は「Amazon」に変更してください。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日の中でも何度も更新しています。私の場合は朝一でメールを受信するように設定しています。変化が激しい昨今の広告・マーケティング業界なので、読むべき書籍のアンテナを張るのには便利なツールになっています。よかったら使ってみてください。ヤフーの検索ランキングを取得する(XML形式)前回は英語ブログのRSSフィードを取得する練習をしました。今回はもう少しマーケティング活動に近いデータを取り扱ってみようと思います。総合(デイリー)」を取り上げたいと思います。これはヤフーで検索されるすべてのキーワードの日々のトップ20をランキングにしたものです。総数ランキングhttp://searchranking.yahoo.co.jp/total_ranking/general/取得方法は前回の英語ブログの取得の際に使ったスクリプトとほぼ同じなのでコピペ・編集で概ねいけますが、今回は一部のXMLデータ取得の際に名前空間を指定する必要があるので、少々難易度が上がっています。前回同様、関数は3つです。onOpen(e)で独自メニューを追加します。parseXml()で、XMLデータを取得、パースし、スプレッドシートにデータを展開します。sendemail()で、展開したデータを、指定したメールアドレスに送信します。【サンプルコード】サンプルコードはこちらです。前述の通り、一部のXMLデータで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の取得については、もう何度かやっていきます。ブログのデータを取得する(XML形式)今、シリコンバレーにきてまして、Google本社、Facebook本社に訪問しています。刺激を受けてきたので、こちらのプロジェクトの意欲も高まっています。いうことで、気分を高める意味も含め、今回はFacebook本社近くのカフェでこのブログを書いています。実践に入ろうと思います。このシリーズはマーケティングに役立つダッシュボードを作るのが目的なので、さまざまなデータを取得してGoogleスプレッドシートに展開することをこなしていこうと思います。atom形式のブログRSSの最新データを取得し、GoogleスプレッドシートにタイトルとURLを展開します。定期的に指定したメールに送信するというスクリプトを作りました。英語の勉強に使うブログ(http://www.eigowithluke.com/)で練習です。onOpen(e)は、Googleスプレッドシートのメニューに作成した関数を実行できる独自メニューを追加します。これは今後作成するスクリプトでも活用していきますので、いつでもコピペ利用ができるようにしておきます。parseXml()は、RSSからXMLデータを取得、パースし、指定した属性の値を取り出し、スプレッドシートに展開します。sendemail()は、スプレッドシートに展開したデータをコピーして、指定したメールアドレスに送信します。サンプルコードはこちらです。編集しないと使えない箇所は1点だけ(宛先メールアドレスだけ指定してください)。そこだけを編集すれば、ご自身のGoogleスプレッドシートのエディターにコピペしてもらえれば使えるはずです。細かくコメントアウトで解説をつけたので、なるべく解読しやすくしたつもりです。パースできる形式はXMLのみならずJSONでもありますが、JSONは別のサンプルで取り組みたいと思います。すべてのコードを保存した後(実行する際に一度認証が入ります)は、スプレッドシートを開くたびに、onOpen(e)で指定した独自メニューが表示されます。Dataを選ぶとデータ取得が行われます(エディターから関数を実行することももちろん可能です)。UrlFetchAppクラスを使うことで外部データの取得はかなり楽にできます。XmlServiceもアップグレードはかなりできることも増えたのでパースもより便利にできるようになりました。Dataを選ぶとスプレッドシートに展開された部分をコピーして指定したメールアドレスにメッセージとして送信されます。Scriptの便利なことの一つにトリガーを設定することができることです。エディターにあるメニューの「現在のプロジェクトのトリガー」を選ぶと、時間やアクションなどの条件に合致した際に関数を実行させることができます。僕の場合は「データ取得を毎月14日と28日の6-7時の間に実行し、その後7-8時の間に最新のデータをメールに送信する」と指定しています。Scriptでさらに自動化をすることで、マーケティング活動に役立つデータを収集することが可能です。これは今後取り上げていきます。今日の練習はここまで。(Atom)アタラアタラの情報はこちら。データフィードとは、あるデータのデータ元からデータ受取先へ更新されたデータを送受信する仕組みである。Scriptは取り組んでいけばいくほど奥深くて面白いのですが、コードを書いて、一発で完成という域にはなかなか達するものではないかと思います。いいますか、人間ですので・・必ずミスは発生すると思ったほうが無難です。2012のロックオンさんのブースで、統合キャンペーン管理プラットフォームの概要についてのパネルセッションをやらせていただきました。いうシステムだったりします。非常に地味に展開してきたこともあり、知らない方も多いと思います。4年目になり、導入先企業もかなり増えてきています。Scriptの習得のために参考となる講座や書籍は今はあまり多くありません。JavaScriptから入ればたくさんの講座や参考書籍、ウェブサイトがありますので、まずはそれがいいかもしれません。