yahoo! ニュースWeb API実践

wordpress へ組み込みたいので
さっそくサンプルを使って実験
すでにサンプルファイルはダウンロードしてあるので
これを使います
以前、WebAPI勉強会でできるだけ最初のころは
コピペのほうがミスもしないし
動かないところで迷う時間ももったいないので
まずはそこから始めたほうがよい
とのアドバイスもありましたので
まずは、やれるところだけ改造して動かします
ダウンロードしたサンプルは圧縮されているので
unzip で解凍すると
wp_webapi_sample
ができるので、この02フォルダにある
topics.php を編集し
実験します
とりあえず、vim でテキストファイルを編集
1234567890
となっている部分を取得した
yahooのアプリIDへ変更
変更したら
cp 02/topics.php /var/www/wordpress/wp-content/themes/twentyeleven/
でファイルをコピー
こういうときに ubuntu とか Linux だと
操作がしやすくていいと思います
これだけじゃ反映されないので
cd /var/www/wordpress/wp-content/themes/twentyeleven/
で移動して
<?php get_template_part(‘tenki’); ?>
の下あたりに
<?php get_template_part(‘topics’); ?>
を追記します
次に wordpress で新規投稿を追加
題名は適当に Yahoo ニュースなどなど
カスタムフィールドを追加して
名前を
category
値をsports
として公開すればsスポーツ関連記事の
ニューストピックスがでます
ちなみに、
値を sports から economy にすれば
経済関連のニュースになります
今回の参考書席は
WordPressプラグイン & WebAPI 活用ガイドブック [Version 3.x対応]

なのですが、P134の値がなぜか category でなく
news_category になっていました
ここだけ注意すれば、あとは普通に動きます

yahoo! ニュースWeb API

yahooニュース Web API のトピックAPIを使うことで
Yahooニュースに掲載されているニューストピックを取得、表示できる
ちなみに、URLは
http://headlines.yahoo.co.jp/hl
リクエストパラメータを指定すれば
国内、海外、経済、スポーツなど
特定カテゴリに絞って表示したり
キーワードにマッチしたトピックのみ表示できる
これを使えば、株の情報とかを集めるときに
企業のニュースを表示したり
研究開発関連の情報を集めることもやりやすくなるかもしれない
ただ、このトピックAPIを使うには
Yahooデベロッパー登録しないとダメ
http://developer.yahoo.co.jp/
から登録可能
トピックAPIについては
http://developer.yahoo.co.jp/webapi/news/news/v2/topics.html
に解説があります
トピックAPIのベースURLは
http://news.yahooapis.jp/NewsWebService/V2/topics
リクエストパラメータは
前回のお天気情報のときと異なり
かなり必須項目が増えています
必須なのは
appid
アプリID
topicname
カテゴリより細かい分類基準
category
表示するニュースのカテゴリ
pickupcategory
ニュースが掲載されたカテゴリ
query
指定したキーワードでトピック検索し
部分一致したトピックのデータが返される
sort
ニュースの並び順
results
表示件数の指定
サンプルリクエストURLが載っていて
http://news.yahooapis.jp/NewsWebService/V2/topics?appid=<あなたのアプリケーションID>&topicname=earthquake
となっているので
おそらく
必須パラメータは
appid アプリID
topicname トピック名
になるみたい
トピック名は
サンプルだと earthquake になっているし
書籍だと
weather になっている
これを調べるには
http://dailynews.yahoo.co.jp/fc/list/
の中の記事をクリックすると
でてくるURLの末尾のところを指定する
例えば、今回のサンプルの場合だと
http://dailynews.yahoo.co.jp/fc/domestic/earthquake/
は地震をクリックしたときのURLのところで
書籍のは
天気情報をクリックした時に
http://dailynews.yahoo.co.jp/fc/domestic/weather/
となっているため、これを使っている
あと
APIには一日の上限が決まっていることが多く
Yahoo!ニュースWeb APIは、
24時間中1アプリケーションIDにつき
5000件のリクエストが上限
となっています

Weather Hacks お天気Web サービス

参考書籍にはXML形式で載っていたけど
サイトで確認してみたら、3月下旬にXML形式でのAPI
提供はもうすぐ終了してしまうらしい
とはいっても、勉強には使えるので
メモしてみた
まず、XML形式での
ベースURLは
http://weather.livedoor.com/forecast/webservice/rest/v1
こんどはJSONになるようだ
こちらの場合のベースURLは
http://weather.livedoor.com/forecast/webservice/json/v1
違いは、rest から json になっているということ
それでも、変更になるまでは参考にすることができます
ということで、今回はXMLのほうでみてみました
JSONのほうはまた機会をみて勉強していきます
まず
わかりやすいサンプルを見るために
http://weather.livedoor.com/forecast/webservice/rest/v1?city=113&day=tomorrow
へアクセスします
するとXMLの階層をみることができます
この時に Google Chrome を使っているなら
Alt + E で F でページない検索ができるので、
これで XMLタグを探すことで、効率的に階層を
理解することができます
このXMLの階層のページがレスポンスフィールドになります
参考までに書いておくと
location の are=が地方名 pref=が県名
city は地域名
telopは天気
image は画像関連で
title が天気
link が天気情報のURL
width が天気の画像の横幅
heightが天気の画像の縦幅
temperatureは気温関連で
maxが最高気温
min が最低気温
となっています
リクエストパラメータを取得するに必要なのは
XMLのときだと
city 地域のID番号
day 天気予報を見たい日
を指定します
http://weather.livedoor.com/forecast/webservice/rest/v1?city=113&day=tomorrow
なら、
city=113
day=tomorrow
がこれに該当します
基本的に web API は
ベースURLに
?の後に
パラメータを&でくっつけて
データ取得用のリクエストURLを作成します
今回なら
http://weather.livedoor.com/forecast/webservice/rest/v1
がベースURL
city=113&day=tomorrow
がパラメータの部分です
&でくっつけているところがわかると思います
もし、東京の今日の天気をみたいなら
http://weather.livedoor.com/forecast/webservice/rest/v1?city=63&day=today
となります

天気予報の表示

天気予報の表示
Weather Hacksお天気WebサービスAPIを使い
livedoor 天気情報で使われている
天気予報
最高気温、最低気温の情報を取得して表示できる
表示できるのは、最大で
今日
明日
明後日
まで
リクエストパラメータで、
全国142ヶ所から地域を指定して情報の取得ができる
これを
wordpress のカスタムフィールドを使うことで
記事毎に天気予報の地域を使い分けることができる
位置情報関連と組み合わせれば
現在地に応じて天気予報をだすこともできそう
ちなみに、このAPIはユーザ登録不要で使える
webサイトで使うなら
サイドバーで表示するといいかもしれない
ちなみに
webAPIの提供元は
お天気Webサービス(Livedoor Weather Web Service / LWWS)

WebAPIとwordpressのテンプレ

WebAPIとwordpressのテンプレ
TwentyElevenテーマの場合
context-single.php
は、投稿記事のタイトル、本文などの部分を生成する
テンプレート single.php
からインクルードされている
ほかの多くのテーマの場合、
single.php
の中にコードを挿入することになる
このときwordpressのループの中に挿入する
ループは、テンプレートファイル内の
wordpressに特徴的な繰り返しの構文
別名
Wordpressループ
The Loop
ソースは、
<?php while(have_posts()): ?>
<?php the_post(); ?>
<h1><?php the_title(); ?></h1>
<div class=”entry-content”>
<?php the_content(); ?>
</div>
<p><?php echo post_custom(‘key_name’); ?></p>
<?php endwhile; ?>
個別の記事ページを出力するための
single.php
の中にあるループは、一つの記事分だけだけど
トップページ部分になる
index.php
home.php
そして、アーカイブページ部分になる
date.php
author.php
category.php
archive.php
では、デフォルトだと
10回繰り返すようになっている
これら、テンプレートの詳細については
テンプレート階層

WordPressをカスタマイズするなら絶対覚えておきたいテンプレートファイルの使い方
が参考になります

wordpress で Web API

以前、
本格ビジネスサイトを作りながら学ぶ WordPressの教科書
を見ながら、ローカル環境に wordpress を導入し作成していきました
今回は
WordPressプラグイン & WebAPI 活用ガイドブック [Version 3.x対応]
の内容を実践していくため
一度テンプレートをデフォルトのものへ戻しました
管理画面で 外観 > テーマ で
Twenty Eleven
を有効化すれば、もともとあったテンプレートになります
もし、 wordpress のテンプレートを、ビジネスサイトへ戻すなら
おなじ要領で、テンプレートを変更することで元に戻ります
今回、元に戻したのは、テンプレートファイルを改造するところがあるためです
まず、実験につかったのは Weather Hacks お天気サービスのサンプルです
これなら、IDなどを取得せずにすぐに実験できるためこちらを使いました
カスタムフィールドの作成などは書籍でもわかるのですが
テンプレファイルを変更するのは少しわかりにくいので
メモしてみました
まず、てっとり早く実験するため、サンプルファイルをダウンロードしてきます
圧縮ファイルを
unzip で解凍し、その中にある tenki.php を使います
今回は、
get_template_part()
で呼び出してみました
cp tenki.php /var/www/wordpress/wp-content/themes/twentyeleven/
でテンプレのディレクトリに
PHPファイルをコピーします
ちなみに、テンプレ関連は、
wp-content/themes/
以下にあります
そして、
vim content-single.php
で設定ファイルを編集します
このときに、vim を使っているなら
/\.entry-content
とすれば、編集するところまでたどり着けます
あとは、この下の部分へ
<?php get_template_part(‘tenki’); ?>
を記述します
ちなみに、
get_template_part(‘tenki’);
というように、ファイルの拡張子は含めずに指定します
これで、後は書籍どおりにいろいろとテストできるようになります

メンテを考えて、ファイルを分割

メンテを考えて、ファイルを分割
WebAPIをwordpressで使うとき
テンプレートファイルを改造するけど
このとき、テンプレートファイルそのものへ
ソースを書くより
各テーマのフォルダへ
WebAPIを扱う PHPファイルをアップしておいて
get_template_part()
で呼び出すようにしたほうが
後々メンテしやすくなります
ちなみに、引数には
PHPファイルを拡張子なして指定します
もし、test.phpなら
get_template_part(‘test’);
去年も、いくつかWebAPIが変更になり
コードの修正が必要になりました
このとき、すべてのAPIを一つのファイルにして
さらに、テンプレートファイルに書いてしまうと
変更するときに
探すのも面倒になります
しかし、各ファイルに分割してあれば
必要な部分の修正が用意になります
パソコンの部品も一体型でないなら
メモリやHDD、グラフィックボードなど
壊れた部品の交換だけですみますので
わかりやすいように、分割したほうが
メンテしやすくなります

wordpressでのWebAPI利用の仕方

wordpressでのWebAPI利用
リクエストパラメータへ値を指定するときに
コード内へ直線記述していくと
おなじようなコードを何種類も用意することになり面倒
このため、wordpressの
カスタムフィールド機能を使い
リクエストパラメータを
記事ごとに変えれるように設定
カスタムフィールドは、wordpressの各記事ごとに
指定が可能な、任意の設定値のこと
カスタムフィールドは、
名前と値の組み合わせからなり
名前と値は、自由に設定できる
wordpressで、WebAPIを使うには
記事ごとに
カスタムフィールドに
リクエストパラメータの値を設定しておいて
これを
WebAPIのリクエストパラメータとして
参照すれば、表示する情報を
記事やテンプレごとに使い分けることができる
カスタムフィールドの値を取得するときには
wordpressのテンプレタグの
post_custom()
を使う
post_custom()の引数へ
カスタムフィールドの名前を指定する

wordpress のカスタムフィールドの表示

WordPressプラグイン & WebAPI 活用ガイドブック [Version 3.x対応]
を参考に、ようやく web api のところまで進みましたが
カスタムフィールドが表示されないため、かなり悩みました
当初、追加したプラグインの
Advanced Custom Fields で行うと勘違いし
その後、カスタムフィールドがどこにあるのか設定等を見直しました
なんとか解決しました
[解決済み] バージョン3.1系で、カスタムフィールドが表示されない
にかかれていたように、
管理画面の上のほう、ちょうどログインユーザ名の下のあたりに
表示オプションというのがあります
投稿 > 新規追加 を選んで
この 表示オプション を開いて
カスタムフィールド のチェックボックスにチェックを入れれば表示されるようになります
ちなみに、ほかのところ、例えばダッシュボード画面で
表示オプションを開いても、カスタムフィールドが現れません
どうやら、各項目に対応した表示オプションが開かれるようです
ちなみに、書籍のこの部分が必要になるのは
P119のあたりになります
もしつまづいている方がいれば、参考にしてみてください

advanced-custom-fieldsプラグイン

advanced-custom-fields プラグインをいれようとしてもうまくいかないため
検索してみました
http://komodo.arrow.jp/wp/614
を参考に、行うことで、解決しました
今回行ったのは、公開してあるサーバーで
advanced-custom-fieldsをいれても中身がないということでした
このため、
https://github.com/elliotcondon/acf
へアクセスし、ZIP をクリックして圧縮ファイルの
acf-master.zip をダウンロード
そして、このファイルを
unzip acf-master.zip
で解凍して
ファイル名を変更します
mv acf-master advanced-custom-fields
これで、フォルダ名が
advanced-custom-fields
になるので、あとは、wordpress のプラグインディレクトリに転送します
ちなみに、ローカル環境の場合、FTP関連の質問がでて面倒なので
cp -rp advanced-custom-fields /var/www/wordpress/wp-content/plugins/
で直接
コピーしました
あとは、プラグインの有効化して、設定していきます