天気予報の表示

天気予報の表示
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/
で直接
コピーしました
あとは、プラグインの有効化して、設定していきます

PHP出力の時のエスケープ

PHP出力の時のエスケープ
APIから取得しているデータを出力するときにほ、
セキュリティーを確保するため
htmlspecialchars()
を使い、エスケープするのがベスト
これは、scriptと見なされる特殊文字や記号を
無害化するために変換するもの
おもに、SQLの攻撃対策に使われることが多い
wordpressでも
esc_html()
esc_attr()
などで、エスケープすることが可能

HTMLて取得したデータをリスト表示

HTMLで、取得したデータをリスト表示するには
WebAPIで!一番使うのが
取得し多データをリスト表示するというもの
これをやるには、PHPでの処理が必須
やり方は少し複雑になる
まず、パースしたXMLデータは、オブジェクト型になっている
お店情報とか、画像など、いろいろあるけど
各項目は、個別に取り出して処理できる
このときに、使うのが
配列の値
一つずつ代入しなごら繰り返す foreach文
foreach文の繰り返し処理で
1件ごとにデータを取り出しながら
HTMLタグをつけ、ブラウザーで表示すれば
リスト表示できる
これは、Amazonや楽天などの
商品検索結果を出すのによく使う
ループしながら表示していくときに、
取得したデータ、例えばリンク先URLとか
住所、電話番号とかを表示するには
PHPの echo で表示していく
このとき、表示する個別データを指定するには
PHPのアロー演算子
->
を使う
例えば、繰り返すときのforeach()が
foreach($libraries as $library)
なら
$libraries の中身を $libraryへ配列の値を一つずつ
代入していく
ここで、住所を示すのが
address なら、
echo $library->address;
で住所が表示される
また、電話番号を示すのが
tel ならば
echo $library->tel;
で電話番号が表示される
そして、リンク先URLが
url なら
echo $library->url;
でリンク先urlになるし、
サイト名が site なら
echo $library->site;
そして、これらをaタグで組合せれば
リンクできるようになる
もし、階層が深いなら
->をつなげて指定する
例えば、
電話番号 telの下に
携帯mobile
非常用 emergency
があって、携帯のほうを出したいなら
echo $library->tel->mobile;
というかんじになる

var_dump()で中身確認

変数の中身を確認する方法
変数へ格納したオブジェクトの中身をみるには
var_dump()を使う
例えば、前回なら
$libraries = simple_xml_loadfile($url);
で$librariesへ格納しているので
中身をみたいなら
var_dump($libraries);
とすればok
これは、
配列、論理値などでもみることができる
WebAPIでは、中身の確認することが多いため覚えておくと
とても楽になる