■目次
PHPを使う利点
必要なもの・こと
PHPのバージョン
キャッシュ
ウェブサービスからデータを取得する
XMLのパース
Last.fmのウェブサービス
WebAPIとPHPを使ってWebページを自動生成する
コメントなどは・・・
目次の自動生成
Web API(PHP)に関連した書籍
正規表現に関連した書籍



■PHPを使う利点

まずは、PHPを使う利点を考えてみましょう。
PHPという言語は、サーバーサイドで動作するHTML環境にマッチしたプログラミング言語です。
既存のHTMLファイルの拡張子を.phpに変更して、<?php 〜 ?>の〜の部分にPHP言語でコードを書き込むだけで、動的な処理が簡単に実現できます。
後述しますが、このページの一番上の目次は、PHPを使って自動生成しています。
また、PHPはC言語などの高級言語に似ているので、他の言語経験が何かしらあれば、それほど苦労せずに習得できるのもGoodです。

▲ページ先頭へ戻る▲


■必要なもの・こと

  • 知識
    まずは、HTML及びXMLの知識が必要です。とはいっても、HTMLに関してはごく小数のタグを押さえておけば、問題ないですし、XMLに関しても後述するXMLパース関数であるsimplexml系列の関数であまり意識しなくても使用できますので、そう心配する必要はありません。多くのWebサービスでは、ユーザーからのリクエストに対しての返答をXML形式の文書で返してくれます。
    このリンクをクリックすると、HTML入門書関連書籍の一覧とユーザーレビューを見ることが出来ます
    このリンクをクリックすると、XML入門書関連書籍の一覧とユーザーレビューを見ることが出来ます
  • リファレンス
    何らかの言語のプログラミング経験のある方なら、PHPオフィシャルサイト - PHP マニュアル -で事足りると思います。サンプルも豊富ですし。サンプルの説明は英文ですが、それほど問題にはならないでしょう。基本的にはコードの塊ですし。
    書籍が必要な場合は、下のリンクを参考に探してみるとよいでしょう。
    ここをクリックすると、PHP関連書籍の一覧とユーザーレビューを見ることが出来ます
    プログラミング経験がまったくない、という方は、Web検索してみると、PHP入門者向けのページがあるので、そこで勉強してから、このページに帰ってきたほうがよいと思います。
  • 環境
    環境といっても、いろいろあります。
    • テキストエディタ
      基本的には、どのテキストエディタでもOKです。リクエストに使用するエンコードやXML返却データの文字コードがUTF-8になっていることが多いので、UTF-8対応のテキストエディタを使用すると、何かと手間が省けて便利です。
    • ローカル実行環境
      PHPオフィシャルサイトでダウンロードできるので、これを自分のPCにインストールすればOKです。
      一番上にあるメニューの「ダウンロード」をクリックすると、ダウンロードページへジャンプできるので、そこから自分のPCで使えるファイルをダウンロードし、解凍し、インストール、といった手順になります。
    • Web実行環境
      Linuxなどで自宅サーバーを構築している場合は、PHPを追加インストールするだけでWebからもアクセス可能なページが作成できます。
      ただ、自宅サーバーを構築している方はごく小数だと思うので、実際にはPHPに対応したレンタルサーバーのお世話になることになります。このウェブサイトもPHPに対応したレンタルサーバーで運営しています。
      探してみると分かるのですが、PHPに対応した無料レンタルサーバー事業者はかなり少ないです。少々の出費は覚悟しておいた方がいいです。
      また、アフィリエイトを使用しないのであれば、以下のレンタルサーバー事業者が無料HPにPHP機能を付加して提供してくれていますので、試してみてもよいかも。
      • dan-d

        ドメイン名がとってもダンディーなのが、魅力!?
        容量無制限でPHP4が使用可能です(個人的に試したところ、PHP5でした。サーバーによって異なるのかもしれません)。
        有料で広告免除サービスも用意されているので、気に入ったら、広告非表示にしてメインのウェブサイトとして使用することも可能です。
      • TOK2

        無料で使える容量無制限レンタルサーバー
        こちらも同様の容量無制限の無料ホームページ。
        無料プランでは、広告が付きますが、PHP5が利用できます。
      ●予算に余裕のある方は、有料タイプのレンタルサーバーを検討してみてもよいでしょう。
      さほど人気サイトにならなくても、意外と早く初期投資分は戻ってきます。
      • ロリポップ!
        「ナウでヤングなレンタルサーバー」でおなじみ?のロリポップですが、サブドメイン名が選択できる、というのがポイント高いですね。どんなサブドメイン名があるかは、上のリンクをクリックすると、ロリポップのHPにジャンプするので、そこで確認できます。
        PHP4というのがちょっとネックかな。それ以外のスペックは十分だと思います。
        07年6月26日現在の料金は、1ヶ月、3ヶ月契約なら月額315円、6ヶ月以上なら月額263円(初期費用が別途必要、詳しくは、上記リンク先で)となっています。
        サポートは、電話サポートはなしで、HPからの問い合わせフォーム経由でのサポートです。
      • ブロックグループ(BLOCKGROUP)

        ブロックグループ!月額250円で1Gの大容量・高機能のレンタルサーバ!
        初期費用無料・月額250円で1Gの大容量・高機能のレンタルサーバ
        バージョン管理機能(Subversion)の標準実装、共同編集機能、パスワード設置機能など、豊富な機能
        Apach2.2 PHP5 MySQL5 UTF-8 IMAP4ベース:最新のサーバ環境で構築
        同社曰く、「新しく作るのだったら、いまさらApache1.3 PHP4 MySQL4.0 POP3はないでしょう」とのこと。もっともです。
        サブドメインは、ユニークネーム.bgrp.jpというドメインになります。短いし、jpだし、Goodです。
        はっきりいって、他の格安レンタルサーバーと比較しないで加入しても後悔することは少ないでしょう。
        自分もXREAをレンタルする前にブロックグループがあれば、こっちをレンタルしたと思います。
        今現在、格安レンタルサーバーの中では、一番お勧めです。詳しくは、上記バナーをクリックしてご確認を。
      • XREA
        このウェブサイトを運営しているXREAは、年額2,400円で利用できます。
        ときおり、一ヶ月200円で利用できる、と記述したウェブサイト等がありますが、これは間違いです。
        あくまでも、年間払いで2,400円であって、短期利用は、それようの料金が用意されています。
        ま、前払いでやってくれれば、その分安くしますよ、ってことです。ちなみに一ヶ月単体の利用料金は、07年6月25日現在で400円に設定されています。
        この有料プランは、VALUE DOMAINが料金収納を代行?(間違ってたらスミマセン)しているようなので、まずは、VALUE DOMAIN - ユーザー登録をすませてから、XREA - お試し登録 -に登録後、VALUE DOMAINのコントロールパネルでXREAで作成したページ(アカウント)を追加、という流れになります。ちょっと面倒ですが、その分安く利用できるので、ま、仕方ないのかな。
        スペック面でも、容量2ギガ、PHP5対応、SQL-DB使用可(5個)、など十分です。「電話によるユーザーサポート不要で、できるだけ安く運営したい」、という方にはお勧めできます。転送量が上限3ギガなので、人気サイトになると、厳しいかもしれないかな、というのがネックでしょうか。このウェブサイトは人気サイトではないので、まったく問題ないです。

▲ページ先頭へ戻る▲


■PHPのバージョン

PHPは、07年6月25日現在で、バージョン4とバージョン5が平行リリースされています。
ただ、今後PHP6が登場すると、PHP4のバージョンアップは打ち切られると思われますので、特に理由がない限り、PHP5を使用したほうがベターだと思います。
PHP4では使えない便利な関数群もPHP5に用意されている、というのもありますし。特に、ウェブサービスを前提に考えた場合、XMLのパースが簡単に行えるsimplexmlクラス(関数群)がサポートされているPHP5を選らばいない理由は見つからないと思います。
このページの説明もPHP5を前提に記述しています。

▲ページ先頭へ戻る▲


■キャッシュ

「キャッシュ」といっても、お金を借りる方のキャッシングではありません、というよくある文面は置いといて、
ここでいう「キャッシュ」は、データをキャッシュする意味のキャッシュです。スペルも、cacheと異なります。
キャッシュの目的は、ウェブサービス提供者への負荷軽減、データキャッシュによるレスポンスの向上、です。
PHP自体には、キャッシュ機能は標準装備されていないのですが、PEARというライブラリにCache_Liteという簡単に使えるキャッシュ機能があるので、これを使うとよいでしょう。
このウェブサイトでも解説しているので、右側サイドバーのサイトマップから漁ってみてください。

▲ページ先頭へ戻る▲


■ウェブサービスからデータを取得する

ウェブサービスからデータを取得する、ということは、言い換えると、外部サーバーから自分のサーバーへデータを読み込む、ということになります。
PHPでは、file、file_get_contentsがあるので、目的に応じて使い分けるわけですが、後述するsimplexml_load_stringの引数がstringなので、基本的にはfile_get_contentsを使用することになります。

▲ページ先頭へ戻る▲


■XMLのパース

すでに述べたとおり、多くのウェブサービスではXML形式でデータを返してくれます。
PHP5のsimplexml系列の関数群、simplexml_load_file、simplexml_load_stringでXMLを簡単にパース出来ます。
simplexml_load_fileは、あくまでもテスト用と考え、実際にはPERAのCache_Liteとsimplexml_load_stringを組み合わせたキャッシュ機能付きsimplexml_load_fileを自作して、通常運用はキャッシュ機能付き関数を使用する、というのがよいでしょう。
この辺の話しもブログで解説しているので、右側サイドバーのサイトマップから漁ってみてください。

▲ページ先頭へ戻る▲


■Last.fmのウェブサービス

現在提供されているウェブサービスは沢山あるので、サンプルとして使用するウェブサービスの選別には迷うのですが、3大ウェブサービスといわれている、Amazon、Google、Yahooは、どれも登録作業が必要で解説が面倒だなあ、ということもあって、ここでは、ユーザー登録なしで使え、多様なデータを返してくれるLast.fmのウェブサービスをサンプルとして使用します。
このウェブサイトでもLast.fmの記事を書いていますので、興味のある方は参考にしてください。
ウェブサービスの仕様は、Web Services - audioscrobbler -で確認してください。

▲ページ先頭へ戻る▲


■WebAPIとPHPを使ってWebページを自動生成する

ようやく必要な準備が整ったので、簡単なサンプルページを作ってみましょう。
あくまでもサンプルなので、実際に使用する場合は、エラー処理やキャッシュ機能の組み込みが必要ですので、あらかじめご了承ください。
ここでは、前述したLast.fmのウェブサービスを使って、任意のアーティストの人気トラック(曲名)を表示するWebページを自動生成するPHPファイルを作ってみましょう。 まず、Last.fmのウェブサービスから任意のアーティストの人気トラックを取得するには、ArtistData→TopTracksと辿っていくと、
http://ws.audioscrobbler.com/1.0/artist/アーティスト名/toptracks.xml
というリクエストを送ると、該当アーティストの人気トラックのXMLファイルが返信されてくることが分かります。
試しに、アーティスト名のところにUTF-8でURLエンコードしたアーティスト名、URLエンコードが面倒な場合は、「Norah+Jones」として(「」は入力しないこと)、リクエストURLは以下のようになります。これをお使いのウェブブラウザのアドレス入力欄に入力後、Enterを押してください。
http://ws.audioscrobbler.com/1.0/artist/Norah+Jones/toptracks.xml
ブラウザによって、表示は異なるのですが、FirefoxやIE6の場合、XMLソースがそのまま表示されるので、帰ってきたデータが確認できます。
とてもシンプルなXMLファイルなので、初心者にはもってこいです。
simplexml_load_stringでこのXMLファイルを読み込むと、簡単にトラック情報にアクセスできるので、あとは自分のアイディア次第で好きなページを作成するだけです。
それでは作成するプログラムの仕様を以下のように規定したサンプルソースを提示します。
スペック:クエリーとして、artist=アーティスト名で与えられたアーティストのトップトラックを表示します。アーティスト名は、UTF-8でURLエンコードした状態で指定することとします。アーティスト名が未指定の場合は、エラーメッセージを表示します。
これだけです。
<html>
<head>
<title>指定されたアーティストのトップトラックを表示します</title>
</head>
<body>
<?php
if(empty($artist)){ print 'アーティスト名を指定する必要があります<br>'; return; }
$req = 'http://ws.audioscrobbler.com/1.0/artist/' . urlencode($artist) . '/toptracks.xml';
$xml = simplexml_load_file($req);
foreach($xml->track as $t){
 print $t->name . '<br>';
}
?>
</body>
</html>
これで、Last.fmウェブサービスが提供しているデータを動的に表示できるページが作成できます。
実際に動かす場合は、UTF-8で保存してください。
また、キャッシュ処理やエラー処理は省いているので、そのあたりも考慮する必要が出てきます。
実際の動作例は、アーティストリンクを参照してください。実際に使う場合は、このようにフォームなどでUIを組み立て方がユーザビリティが高くなるので、お客さんがつきやすくなります。
なお、アーティストリンクでは、キャッシュを行っていますので、一定時間、同じリクエストに関しては、同じ結果を表示するようになっています。さほど、即時性を持たないデータではこのようにしておくことで、トラフィックを抑えることが必要なのは、前述したキャッシュの項目を見ていただければ明らかだと思います。
上のほうで、「UTF-8でURLエンコード」と書きましたが、UTF-8でファイルを保存しておくことを前提に考えれば、プログラミングの観点から見るとurlencodeをコールするだけですみます。UTF-8以外でファイルを保存した場合は、mb_convert_encodingなどで事前にUTF-8に文字コード変換してからurlencodeに渡す必要があります。また、取得したXMLデータを保存した文字コードに変換する必要もあります。このような手間が必要なことを考えると、ウェブサービスを中心に考えた場合、UTF-8以外で保存するメリットはあまりありません。
各命令については、PHPリファレンスで確認してください。
$xmlにパースされたXMLデータが格納され、$xml->track配列にname,reach,urlが含まれているので、今回はその中から、トラック名であるnameだけを表示しています。
配列処理には、サンプルに挙げたforeachやfor文があるので、用途に合わせて使い分けるとよいでしょう。今回のようにすべてのデータを表示する場合は、foreach文が便利です。

▲ページ先頭へ戻る▲


■コメントなどは・・・

このページに対してのコメントなどは、ブログ、もしくは、ページ一番下の連絡アドレスにどうぞ。
ブログのコメント欄にいただいた方が、詳しい方が見てくれている可能性もあるので、有用な情報が得られるかもしれません。

▲ページ先頭へ戻る▲


■目次の自動生成

初心者向けページという趣旨からすると、飛躍しすぎな気もするのですが、意外と簡単に実現できて便利な、目次の自動生成について説明します。
ウェブページでも目次というのは、重要な要素なのですが、ついついおろそかにしてしまいがちだったりします。コンテンツの内容と目次の内容が同期していないページ、結構ありますよね。閲覧者からすると、ウェブページの信頼度も低下してしまう可能性もあるので、おろそかにはできません。
この面倒な目次の作成もPHPを使えば、自動生成できるのでラクチンです。
まず、仕様を考えてみましょう。
目次に必要なのは、
アンカー名、目次の名称
の二つです。
そこで、以下に該当する文字列を抽出して目次を作成することを考えます。
<a name="anchor_name">■目次の名称</a>
アンカー名がanchor_nameで目次の名称が目次の名称です。
さて、これらの文字列をどうやって取り出すか?ということになるわけですが、
PHPには、文字列検索を行う関数が用意されています。ここでは、preg_matchを使った例を紹介します。
$str = file('filename.php');
foreach($str as $array){
	$pattern = '/<a name="(.*?)">.*?■(.*)<\/a>/';
	$match = preg_match($pattern,$array,$match_array);
	if( $match ) {
		$array_size = count($match_array);
		if( 3 == $array_size && !empty($match_array[1]) && !empty($match_array[2]) ) {
			print '<a href="#' . $match_array[1] . '">' . $match_array[2] . '</a><br>';
		}
	}
}
これで、目次が作成できるので、BODY直下に書き込んでおけば、同じ書式で項目名を作成すれば、自動的に目次にも追加されるので、メンテナンスフリーでラクチンです。
カスタマイズすることで、ul,liなどで親子状態を作ったりすると、さらに詳細な目次も作成できるので、用途に応じて作るとよいでしょう。
まず、strにファイルの内容を読み込み、foreachループで一行ずつ処理していきます。
pattern変数に、このような値を設定しておくと、目的の文字列が取り出せます。ちなみに、正規表現を使って設定しているのですが、正規表現まで説明すると、このページの守備範囲を超えてしまうので、ここでは割愛させていただきます。
正規表現について興味のある方は、Webで検索するか、正規表現に関する書籍をAmazonで検索ページを参考に、読んでみるとよいでしょう。このページでは、Amazonのユーザーレビューも表示されるので、一覧するにはとても便利です。ちなみに、このページもAmazonWebServiceとPHPで自動生成されたページです。
元に戻りますが、
preg_matchの2番目の引数には、検索対象文字列、第3引数には、マッチした場合、その結果を代入する変数を指定しています。条件にマッチした場合は、この変数にマッチした値をセットし、関数はTRUEを返します。マッチ結果を代入する変数には、配列として格納され、配列[0]にはマッチした文字列全体、配列[1]にはアンカー名、配列[2]には目次の名称が入るように、正規表現を作っています。具体的にはpatternの括弧にマッチした文字を代入してくれます。
ということで、その下の条件文でマッチ確認後、配列サイズ==3を確認しています。何で3?と思うかもしれませんが、先ほど説明した配列にどのような形で値が格納されるかを考えれば明らかです。
emptyで確認しているのは、空のアンカーや目次の名称を目次にしても意味がないから、です。
アンカー名と目次の名称が取得できたら、print文でリンクを作成するだけです。
preg_matchだけ分かりにくいと思いますが、リファレンス - preg_matchを参考に勉強してみてください(簡単なサンプルも豊富です)。

▲ページ先頭へ戻る▲


■Web API(PHP)に関連した書籍

(データ提供:Amazon.co.jp)

■正規表現に関連した書籍

(データ提供:Amazon.co.jp)

▲ページ先頭へ戻る▲





■お知らせと連絡先

このウェブサイトで取り上げて欲しい話題や分かりにくい点などありましたら、
以下のメールアドレス宛にメッセージをいただければ、参考にさせていただきます。

メールアドレスは、work_komiあっとまーくyahoo.co.jpです。
(「あっとまーく」は、半角英数のあっとまーくに変換してね。)

また、XBOXをお使いの方は、ゲーマータグ(akbox)にてフレンドリクエストを受け付けています。