中島みゆき2007コンサート大満足

10月6日大阪フェスティバルで開催の中島みゆき2007コンサート行ってきました。あの歌唱力とトークのギャップはあいかわらずです。まだコンサート中なのであまり詳しくは書けません。セットリストは今日WEBを検索すると見ることが出来ました。

中島みゆきさんにはいろんな曲がありますが、拓郎さんのFANとしては、これって拓郎さんに近い曲だなと思うことがあります。「ララバイSINGER」にある拓郎さん風の「あなたでなければ」は、その歌詞が、以前、中島みゆきさんが拓郎さんに提供した「永遠の嘘をついてくれ」という曲の続編に思えてなりません。そんな中島みゆきさんがなんと、コンサートの中で広島弁の歌をうたうので、びっくりしました。間違いなく拓郎さんの「唇をかみしめて」でした。続けて歌ったのがファイト。ファイトは逆に拓郎さんがコンサートで歌ったことがあります。感動しました。中島みゆきさんがコンサートで自分の楽曲以外の歌を歌ったのは始めてのようです。

APIサービスを利用

APIサービスを利用して岡山WEBというサイト名にそったコンテンツを作ってみました。前回はアマゾンWEBサービスを利用して岡山作家ガイドを特集しましたが、今回「ぐるなび」という全国のグルメ情報をを扱っているサイトの「ぐるなびwebサービス」を利用して、グルメサーチ岡山というコンテンツにしてみました。次にリクルートのフロム・エーナビというアルバイト・バイト・仕事探しの総合サイトの「お仕事検索webサービス」を利用して岡山エリアのアルバイト情報に特化したコンテンツを試作してみました。

アマゾンwebサービスを使う

前々から、岡山WEBネットに岡山出身の作家の著作一覧を表示させることが出来たらと思っていたのですが、APIサービスのアマゾンwebサービスを使うことで可能ということが分かりました。参考にしたのは「PHP×WEBサービス APIコネクションズ」という本です。残念なことにPHP5を前提に書かれているので、サンプルコードをそのまま使うことは出来ませんでしたが、一部を変更することでPHP4.3でもTESTすることが出来ました。

一応の結果をチャンネル::岡山出身作家ガイドに載せています。

今のところ、その作家以外に、その作家の名前のついた文学賞の受賞作もいっしょについてきていますがそのうち修正します。

なお、アマゾンからのデータは一度(1ページ)に10件分しか出てきませんので、10件以上のデータを表示するにはページ送りのページャーが必要です。今回、ページャーは、レッツPHP!さんの「簡易ページャ」を使わせてもらいました。このような便利なツールを公開してくださったことに感謝いたします。 

今度はぐるなびの岡山版の情報をを岡山WEBネット上に載せてみようと思います。APIサービスのおかげで単なるホームページリンク集に加えて、岡山に関するサイトとして充実できそうです。

中島みゆき2007コンサートツアー

中島みゆきさんのコンサートチケットが届きました。今年は、土曜日か日曜日に行きたかったので、大阪フェスティバルに申し込み10月6日が抽選であたってました。チケットに書いてあった座席番号によると、GG列、真ん中より少し後ろの1段上がった辺りのようです。視力は余りよくないのでオペラグラスが必要のようです。

今年は、後もうひとつ、児島へ吉田拓郎さんのコンサートに行きますが、体調はどうなんでしょうか。早く良くなることを願っています。児島がコンサート打ち上げと思っていたら、8公演が延期になり年を越してしまうようです。拓郎さんの元気な姿を見たいものです。

久しぶりにCGIと

ここのところPHPばかり勉強していたのだが、急にCGIプログラムに取り組むことに、。

前から気にはなっていたのですが。

ショッピングカートのCGIで配達希望日を選択するところがある。月と日をプルダウンから選択するものです。ある事情で、日付の指定は1週間以降からにすることにしたので、JavaScriptで配達希望日は×月×日以降を選んでください、と注意書きを書いていた。この表示により、たいていは1週間以降の日付をが選択してくれるのです。ところがプルダウンの選択は1週間以前の日付も選択できるのです。ある日、見落として、希望日に届かず、クレームとなりました。

このうえはCGIの改変しかないと思い、日時に関する関数などを調べて時間をとられました。

日時の関数はgmtime、localtime、timeの三種類で、現在時間を返してどう表現するかというものだけです。今回やりたいことは、年と月と日の数字が分かっている場合に現在時間と比較できる数字になってくれるかということです。

検索しているうち「PerlライブラリモジュールTime::Localにはtimegmサブルーチンが用意されていて、gmtimeの逆変換が可能です。」という表記が、さらに調べるとこのモジュールは、perlをインストールした時にlibフォルダーの中のtimeフォルダーに入っていることが分かりました。timeフォルダーごとテスト用のCGIが置いてあるフォルダーにコピーしました。

これで、指定した年、月、日の数字を指定すると、1970年1月1日からの秒数が返ってきます。これをtime関数から得られる現在時間の1970年1月1日からの秒数に1週間分の秒数を足して比較すればいいはず。

テスト用のCGIはこんなかんじです。

#!/usr/bin/perl

use Time::Local;
print “Content-type: text/html\n\n”;
print “<HTML><BODY>\n”;
$year = 2007;
$mon = 9;
$day = 20;
$hours= 23;
$min =0;
$sec=0;

$kibou = timelocal($sec, $min, $hours, $day, $mon - 1, $year);

$genzai= time;

$n=7;
$week=$n*60*60*24;
$ikou=$genzai+$week;

print “希望日”.$kibou.”<br>”;
print “現在日”.$genzai.”<br>”;
print “指定日以降です”.$ikou.”<br>”;

if($genzai){
if($kibou<$genzai){
print”error”;
}else
{
print”ok”;
}
}

print “</BODY></HTML>\n”; 

exit;

1、ショッピングCGIの送り先、支払い方法を入力した後の確認画面を出力するCGIを加工。

2、通常、名前などが未入力などのときにエラーを返すプログラムに、配達希望月と日が入力されていれば、配達希望日と現在時間に1週間分の秒数を足して比較して、配達希望日の秒数が少なければ、エラーメッセージを返す。

という方針を立てて改変しました。一応うまくいきました。しかし、課題は、12月の末から1月にかけての年の変わり目です。

ビジュアルリッチエディタ?

このブログの記事投稿にはビジュアルリッチエディタといってブログの投稿でよく使いそうなタグのコマンドがアイコンをクリックしただけで自動的に追加される。外部リンクなどもクリックしてURLをコピーペーストすればいいので便利です。

しかし、ある日、アイコンがなくなっている!

理由が分からず、wordpressのフォーラムで検索したら、ブラウザによっては使えないようなことが書かれていました。それで、いつも使っているIEではなく、Firefoxにするとちゃんとアイコンがありました。ひょっとしてIEの一時ファイルの破損で不具合?IEではたまに、画像を右クリックで保存しようとするとJPEGの画像のはずがBMPでしか保存できなくなるということがある。それも一時ファイルの破損の影響らしいということでした。

ツール-インターネットオプション-インターネット一時ファイル-削除を実行。

やっと元のビジュアルリッチエディタに復活。

APIを使いたい-3

APIの対象は、livedoor「お天気Webサービス。」です。ここから例えば岡山南部の明日の天気予報をリクエストパラメーターを使用して、XMLで呼び出し、その中から必要なデータを取り出してWEBに表示させようと思います。PEARのXML_Serializerを使うことでXMLの解析ができ、必要な情報が読み出せます。


require_once "XML/Unserializer.php";
$xml_data = file_get_contents("http://weather.livedoor.com/forecast/webservice/rest/v1?city=88&day=tomorrow");
$parser = new XML_Unserializer(array('parseAttributes' => true));
$parser->unserialize($xml_data);
$XML = $parser->getUnserializedData();
print_r ($XML);

このprint_rは、変数の情報をかえすコマンドで、この場合、$XMLに収められた変数(パラメーターから得られたXMLの情報)の構造が分かります。実は最初見た時はよく分かりませんでした。このようになります。(UTF-8で出てくるのでブラウザのエンコードをUTF-8にします。)

Array
(
[version] => livedoor Weather Web Service 1.0
[author] => livedoor Weather Team.
[location] => Array
(
[area] => 中国
[pref] => 岡山県
[city] => 岡山
)
[title] => 岡山県 岡山 - 明日の天気
[link] => http://weather.livedoor.com/area/33/88.html?v=1
[forecastday] => tomorrow
[day] => Tuesday
[forecastdate] => Tue, 28 Aug 2007 00:00:00 +0900
[publictime] => Mon, 27 Aug 2007 05:00:00 +0900
[telop] => 曇り
[description] => 中国地方は、薄雲が広がっていますが、高気圧に覆われているため、概ね晴れています。
今日(27日)は、高気圧に覆われますが、湿った空気の影響で大気の状態が…
[image] => Array
(
[title] => 曇り
[link] => http://weather.livedoor.com/area/33/88.html?v=1
[url] => http://image.weather.livedoor.com/img/icon/8.gif
[width] => 50
[height] => 31
)


PHPの参考書など読んだ時、少し分かりにくいのでいつもとばしていた連想配列と気づくのに少し時間がかかりました。そのうえ、初歩の説明には、単純な連想配列の説明だけなので、このような配列の中に配列があるような多次元連想配列の分かりやすい説明には、なかなかお目にかかりません。いろいろと検索していると、
JOHO.BOO.JP というサイトにプログラミングメモのコーナーがあり、PHP、多次元配列という項目がありました。ここに多次元配列の情報を読み出す方法が書いてありました。これにより、先ほどの$XMLから必要な項目だけ読み出すことが出来ます。

print $XML["location"]["city"];
print $XML["link"];
print $XML["title"];
print $XML["telop"];
print $XML['image']['url'];

これで出力結果は、
岡山 http://weather.livedoor.com/area/33/88.html?v=1岡山県 岡山 - 明日の天気曇りhttp://image.weather.livedoor.com/img/icon/8.gif
となるはずです。後は、ひとつずつ文字コードをエンコードして、わかりやすくレイアアウトすればいいと思います。

APIを使いたい-2

PHP5がサーバーにインストールされていたらこんなに苦労しなくてもすんだのですが・・・、
PHP4.3とPEARの力を借りてlivedoor「お天気Webサービス。」が使えそうです

いろいろと参考になりそうなサイトを検索してようやくたどり着いたのがEC studioというブログ。そこにPEARのXML_Serializerを使うことによりXMLデータを配列に格納する処理ができるということがわかりました。

XML_Util とXML_Parser が必要なのでそれらもいっしょに追加。次は、どんな配列になるか確認して見ようと思います。

APIを使いたい

最近は公開API(アプリケーション・プログラミング・インターフェース)という便利なツールがある。それらは、お天気情報や楽天のショップ情報、アマゾンのショップ情報などをXMLなどで提供してくれるサービスなので、PHPを勉強するのならやはりAPIにもとりかかりたいということで、いろいろと情報を集めて見ました。

参考にしたサイトは10分で理解する初めてのAPIとかPHPでWebAPIを骨までしゃぶるです。

しかし、どうも調べるにつれPHPのバージョンが5.0以降でないとついていけないようです。このブログを置いているレンタルサーバーのPHPは4.3なのです。それでも説明をよく読むと、PEARというライブラリをインストールするとできないこともないようだということでした。

レンタルサーバーにPEARを導入するには、サーバーの管理会社へ依頼するか自分でインストールするしかないのですが、今回はとりあえず自分でインストールしました。

まず、ローカルのWINDOWSパソコンにインストールしているPHPには既にPEARのインストーラーgo-pear.batがあるのでそれをdosプロンプトで実行し、その後必要なライブラリーを追加でインストール。

この辺りは、WindowsへPEARをインストールする が参考になりました。

そして、ローカルのPEARをサーバーにアップロードしHTACCSEEにPEARのパスを通して完了。いよいよお天気APIに挑戦してみることにします。

PHPで配列の勉強2-Feedcreatorを試用

CGIでRSSフィードを生成するのにはYUKI::RSSが簡単に使えることは以前このブログで紹介しましたが、PHPには、Feedcreatorという便利なライブラリーがありました。このライブラリーはLGPLなのでだれでも自由に使用できるものということなので試用して見ることにしました。

ダウンロードはSourceForge.netからです。

RSS 0.91/1.0/2.0、Atom 0.3/1.0などのフォーマットに対応しているので、好みのスタイルでフィードを作成することができます。デフォルトはRSS0.91でした。

まず、ダウンロードしてきたファイルのうち、ライブラリーは「feedcreator.class.php」ですが、日本語に対応させるため、672行あたりのvar $encoding = “ISO-8859-1″; のISO-8859-1をUTF-8に変更しました。サンプルのdemo.phpをみると、YUKI::RSSと同じようにライブラリーを読み込ませ、最初のブロック(//define channel)の部分でサイトのタイトル、説明、サイトURLなどの固定部分を書き込み、次のブロック(//channel items/entries)に記事を書きこんだらいいようです。//channel items/entriesのブロックにデータベースからデータを読み込む例がダウンロードしたファイルのofficial_demo.phpに書いてありましたが、そこまではまだ手が出ないので、CSVのようなデータファイルから配列を使って一行ずつ書き出すように考えて見ました。(配列の勉強です)

1、データファイルの準備
ファイル名 data.txt(UTF-8で保存)
内容:
111111,aaaaaaa
22222,bbbbbb
33333,cccccccc

こんなデータを作って保存。今回は文字の変換を考えないように、エンコードをUTF-8で保存。

2、RSSフィードを作成するためのPHPプログラムを以下のように作ってみました。

< ?php
define(’TIME_ZONE’, ‘+09:00′);//日本時間に変更
require_once ‘include/feedcreator.class.php’;//設置場所のパスを指定
$rss = new UniversalFeedCreator();
$rss->useCached();
$rss->title = ‘新着情報’;
$rss->description = ‘岡山WEBサーチの新着情報です’;
$rss->link = ‘http://www.okayamaweb.net/’;
$rss->syndicationURL = ‘http://www.okayamaweb.net/***.xml’;

//データファイルから記事を読み出す
$file_data=file(”data.txt”);
//複数行に渡るファイルの内容を読み出す
foreach($file_data as $value){
   list($title,$body) = split(”,”,$value);

$item = new FeedItem();
$item->title=$title;
$item->link = ‘http://www.okayamaweb.net/’;
$item->description =$body;
$item->author = ‘okayamaweb’;

$rss->addItem($item);
}

//$rss->saveFeed(’RSS2.0′, ’sample.xml’);
$rss->outputFeed(’RSS2.0′);//RSS2.0を空欄にすると0.91で表示1.0と記入するとRSS1.0で表示
?>

とりあえず簡単な例ですが、いろいろと応用できそうです。一応エスケープ文字にも対応していました。ただし、日本語への変換がどこまで出来ているのかは使って見なければ分かりません。

Project-Id-Version: WordPress 2.5 ja 1.0 Report-Msgid-Bugs-To: wp-polyglots@lists.automattic.com POT-Creation-Date: 2008-04-25 15:51+0000 PO-Revision-Date: 2008-04-26 21:17+0900 Last-Translator: tai Language-Team: wp-ja MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Poedit-Language: Japanese X-Poedit-Country: JAPAN Plural-Forms: nplurals=1; plural=0; X-Poedit-SourceCharset: utf-8 X-Poedit-KeywordsList: __;_e;__ngettext:1,2;_c X-Poedit-Basepath: /Applications/MAMP/htdocs X-Poedit-SearchPath-0: wp-trunk « Previous entries Project-Id-Version: WordPress 2.5 ja 1.0 Report-Msgid-Bugs-To: wp-polyglots@lists.automattic.com POT-Creation-Date: 2008-04-25 15:51+0000 PO-Revision-Date: 2008-04-26 21:17+0900 Last-Translator: tai Language-Team: wp-ja MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Poedit-Language: Japanese X-Poedit-Country: JAPAN Plural-Forms: nplurals=1; plural=0; X-Poedit-SourceCharset: utf-8 X-Poedit-KeywordsList: __;_e;__ngettext:1,2;_c X-Poedit-Basepath: /Applications/MAMP/htdocs X-Poedit-SearchPath-0: wp-trunk · Project-Id-Version: WordPress 2.5 ja 1.0 Report-Msgid-Bugs-To: wp-polyglots@lists.automattic.com POT-Creation-Date: 2008-04-25 15:51+0000 PO-Revision-Date: 2008-04-26 21:17+0900 Last-Translator: tai Language-Team: wp-ja MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Poedit-Language: Japanese X-Poedit-Country: JAPAN Plural-Forms: nplurals=1; plural=0; X-Poedit-SourceCharset: utf-8 X-Poedit-KeywordsList: __;_e;__ngettext:1,2;_c X-Poedit-Basepath: /Applications/MAMP/htdocs X-Poedit-SearchPath-0: wp-trunk Next entries »Project-Id-Version: WordPress 2.5 ja 1.0 Report-Msgid-Bugs-To: wp-polyglots@lists.automattic.com POT-Creation-Date: 2008-04-25 15:51+0000 PO-Revision-Date: 2008-04-26 21:17+0900 Last-Translator: tai Language-Team: wp-ja MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Poedit-Language: Japanese X-Poedit-Country: JAPAN Plural-Forms: nplurals=1; plural=0; X-Poedit-SourceCharset: utf-8 X-Poedit-KeywordsList: __;_e;__ngettext:1,2;_c X-Poedit-Basepath: /Applications/MAMP/htdocs X-Poedit-SearchPath-0: wp-trunk