トップ > ラボブログ

ラボブログ

PHP アーカイブ


2009年11月13日


「はてなクラウドソーシング」のYouTube APIの質問に回答

スパイスラボ神部です。


今日ブラっと「はてなクラウドソーシング 」を見ていたら面白そうな質問があったので思わず回答。


質問


質問を要約すると:


・YoutubeのAPIの仕様をざっくり知りたい

・英語がわからないので読むのが面倒です・・・


やりたいことは

・日本と外国のでデータを出し分ける方法

・公式の動画とかの判別できるステータスを知りたい

 >映画や音楽のプロモーションPVな

あたりで、追加情報としては


・日本語での解説サイトも希望


らしいです。


回答


ブログで聞けばいいのにはてなで質問してくれるとはありがたや・・・


はてなで聞いてもらえるとダイアリーの有料オプションが継続できるので、今後ともぜひはてなクラウドソーシングをご利用くださいw


▼これくらいざっくりならいけるでしょ


このテンションでいくと、ググって一番上に出てくるものよりも
この文章が一番わかりやすいです。


-YouTube APIの最も簡単な説明書(日本語版) | りょーちの駄文と書評


さらに、ここの記事からいける
http://www.usamimi.info/~ryouchi/youtubeAPI_explain/
でリンクしている
http://www.usamimi.info/~ryouchi/youtubeAPI_explain/listbytag.phps
が慈悲深いくらいわかりやすいです。


YouTube APIの基本的な流れはREST APIに何らかのパラメータを与えて結果をXMLで受け取り、受け取ったXMLを加工して表示してあげるという 流れになります。


PHPでXMLのパージングだけサーバで使えるバージョンでかなり
やり方が違うのでそこだけご注意。


▼公式の動画を判別できるステータス


こればっかりは Google のドキュメントが一番はやいです


動画の取得と検索
http://code.google.com/intl/ja/apis/youtube/developers_guide_php.html#RetrievingVideos
の二画面スクロールしたあたりにあり「特定のユーザーがアップロードした
動画の取得」がそれにあたるので、公式アカウントを特定したらそれをぶち込むだけで
いけるはずです。


▼国別の出し方


これはよくわからないですが、regionID というのを指定すると、
RSSフィードのコンテンツを国別に出し分け出来るらしいです。


http://code.google.com/intl/ja/apis/youtube/reference.html#Region_specific_feeds


検索で指定する方法もあるとおもうので、他の人に任せます。


▼ほかにも分からないことが出てきたら


下記のURLをメールで詳しい人に送りつけて


-http://code.google.com/intl/ja/apis/youtube/reference.html#Region_specific_feeds


-http://code.google.com/intl/ja-JP/apis/youtube/2.0/developers_guide_protocol_audience.html


-http://code.google.com/intl/ja-JP/apis/youtube/faq.html


このなかに「○○について書いてある部分ってある?」


と聞くと、質問された側がググる手間が一段省けるので
文章で説明するよりも答えが早く帰ってくると思います。


ご参考まで。

ブックマークに追加する

トラックバック

このエントリーのトラックバックURL:
http://www.spicebox.jp/cgi-bin/mt/mt-tb.cgi/1289

コメントを投稿

(いままで、ここでコメントしたことがないときは、コメントを表示する前にこのブログのオーナーの承認が必要になることがあります。承認されるまではコメントは表示されません。そのときはしばらく待ってください。)


2009年08月02日


PHP5 の SimpleXML を使って処理するときのあれこれ

スパイスラボ神部です。


PHP5 には SimpleXML という大変便利な関数があるのですが、使いこなしにはいろいろコツがあるようです。


名前空間付の XML ファイルの処理


1.超正当派解決法


-SimpleXMLで名前空間付きタグの一覧を取得する - 肉とご飯と甘いもの @ sotarok


2.自分でパーザを補完してなんとかするよ系


-php5でsimpleXMLを使っているのですが、名前空間の接頭辞のついた属性を取得する方法がわかりません。 こんな感じの.. - 人力検索はてな


3.ぶっちゃけパースできればいいじゃん系


-.☆★ ステレオタイプラボ ★☆. [php]simplexml_load_fileでうまくパース出来ない、なんて事はない。& 正解とお手軽方法


不正な文字の処理


これ必要かどうかはわからないのですが、なにかうまくいかなかった未来のために。


-Yz NOTE PHP simplexml_load_string でパーサーエラー


-simplexml_load_file()関数で、 http://b.hatena.ne.jp/keyword/web%E3%82%B5%E3%83%BC%E3%83%93%E3%82%B9?mode=rss&sort=count を取得すると、 445: parser error : PCDAT.. - 人力検索はてな


ご参考になりましたら。


 

ブックマークに追加する

トラックバック

このエントリーのトラックバックURL:
http://www.spicebox.jp/cgi-bin/mt/mt-tb.cgi/1146

コメントを投稿

(いままで、ここでコメントしたことがないときは、コメントを表示する前にこのブログのオーナーの承認が必要になることがあります。承認されるまではコメントは表示されません。そのときはしばらく待ってください。)


2009年05月29日


phpmyadmin 3.x.x を使うのに PHP 5.2+ が必要と言われるときは

スパイスラボ神部です。


ひさしぶりに phpmyadmin のサイトなんかを見ていたら、バージョン 3 が出ていて、安定版が 3.1.5 で開発版が 3.2.0 だったりするらしいです。しかし、入れてみたところで PHP 5.2+ が必要とか言われます。しかも 5.2 を入れただけじゃだめという不親切ぶり。そこで、ちょっとしたコツを書いておきます。なお、CentOS 5 前提になっておりますのであしからず。


-phpmyadminが好きだ! - Favorites!


まずは CentOS 5 に PHP 5.2 を導入


まず、ここでつまづきやすいので、下記のように Jason の リポジトリのRPM を使って 5.2 にアップグレード出来ます(ご利用はご注意の上)。


-CentOS5にPHP5.2.5を割と簡単にアップデートする方法みーっけ★ - GuinEa Pig


しかし、これで 5.2+ になったから安心と思いきや、これが全然動きません。悔しいことに、まだ「PHP 5.2+」が必要」って言われたりもします。


そこで、質問掲示板 - CentOSで自宅サーバー構築 にある「PHP5.2をインストールし、更に開発ツールの”apxs”が必要らしい事も解ったので」という言葉を信じて httpd-devel を yum install すると、無事動くようになりました。


ついでに、大量データのインポート方法も


phpmyadmin で数十万行のデータを書き出したはいいけど、ファイルサイズが大きすぎてインポートできない、なんてことがあるかと思います。そういうときは(そういう時にはもう phpmysql なんかを使わないのが基本なのかもですがそれはおいておいて)、mysql コマンドを使うと便利なようです。


-mysqldumpでバックアップ&復元 - phpspot


こちらを参考にすると


-mysql -u root -p [データベース名] < [phpmyadmin でエクスポートした sql ファイル]


なんてことが出来るみたいです。楽ちんですね!


-基礎からのMySQL [基礎からのシリーズ] (プログラマの種シリーズ)が好き! - ILOVEIT(β)

 

ブックマークに追加する

トラックバック

このエントリーのトラックバックURL:
http://www.spicebox.jp/cgi-bin/mt/mt-tb.cgi/1072

コメントを投稿

(いままで、ここでコメントしたことがないときは、コメントを表示する前にこのブログのオーナーの承認が必要になることがあります。承認されるまではコメントは表示されません。そのときはしばらく待ってください。)


2009年05月07日


さくらインターネットで CakePHP+PEAR

スパイスラボ神部です。


さくらインターネットで CakePHP+PEARする方法についてのかんたんなまとめです。


さくらインターネットで CakePHP+PEAR


下記の3つが参考になります。


CakePHP のさくらインターネットへのインストールについて


-"さくらインターネットで404エラー" フォーラム - CakePHP Users in Japan


あと、さくらインターネットに限らずだけど AuthComponent でのリダイレクトが core.php の Security が high だとループすることがあるので注意。middle とかにしてみましょう。このへんはちょっと謎。


PEAR のさくらインターネットへのインストールについて


-コマンドプロンプトを使わないで、さくらへPEARをインストール(Go-PEAR使用) (masha.webTechLog)


-小山太郎.com » Blog Archive » さくらインターネットでPEARをインストール


追記:created と modified が保存されない


さくらインターネットに設置することが原因か、MySQL のデフォルト設定に問題があるのか、created と modified が 00:00:00 になってしまう現象が起きました。本来は MySQL 側でデフォルト値を NULL とすれば解決するらしいのですが、さくらインターネット上では


$this->data['User']['created'] = null;
$this->data['User']['modified'] = null;


などとする必要がありました。


参考:"createdとmodifiedが記録されない?" フォーラム - CakePHP Users in Japan


まとめ


非常にわかりやすくまとまっているので、これだけです(笑)


追加で気になるところがあれば、追記したいと思います。


 

ブックマークに追加する

トラックバック

このエントリーのトラックバックURL:
http://www.spicebox.jp/cgi-bin/mt/mt-tb.cgi/1013

コメントを投稿

(いままで、ここでコメントしたことがないときは、コメントを表示する前にこのブログのオーナーの承認が必要になることがあります。承認されるまではコメントは表示されません。そのときはしばらく待ってください。)


2009年04月29日


Services_Twitter を利用してポストする覚え書き

スパイスラボ神部です。


PHP PEAR の Services_Twitter を利用して Twitter ポストする、というものをさくっとやろうと思ったら以外と難関がありましたのでノウハウを共有しておきます。


インストールとセットアップ


基本的にはここに載っているソースコードの通りです。


-PHPからTwitterに投稿するサンプルコード&サンプルアプリ:phpspot開発日誌


ただしインストールは下記のように簡単にインストール出来るようになっています。


pear install Services_Twitter-0.2.0


PHP を 5.2.* にアップデート


ここで注意。PHP が5.2.0 以上でないと、この PEAR パッケージは利用出来ないようです。


CentOS 5 では下記の方法でアップデートすることが出来るようです。


CentOS5にPHP5.2.5を割と簡単にアップデートする方法みーっけ★ - GuinEa Pig


ほかにも、Stable でないほうのライブラリから Validation 入れろとか言われるかもしれないので、


pear install channel://...


という感じで言われたライブラリのチャンネルからインストールしましょう。


実践


ここまでできたら、元の例に従ってポストしてみましょう。


余談


Services_Twitter には二種類あるらしい。


本家版を使う場合は、まったく必要のない情報ですが、以下参考まで。


-Services_Twitter-0.1.0 betaがリリースされたので日本のと比較してみた - 肉とご飯と甘いもの @ sotarok


で、日本版の Servce_Twitter ではインストール時にオプションで使っているパッケージが無くなっているらしい。


Services_Twitter - ゆめうつつ


で、現在はそれを株式会社RYUSの id:halt さんが神アップロードしてくださってます。


Jsphonをcodereposにアップロードしました。 - XOOPS専門-株式会社RYUS


こういうときに、ライセンスって大事になりますよね。
 

ブックマークに追加する

トラックバック

このエントリーのトラックバックURL:
http://www.spicebox.jp/cgi-bin/mt/mt-tb.cgi/1000

コメントを投稿

(いままで、ここでコメントしたことがないときは、コメントを表示する前にこのブログのオーナーの承認が必要になることがあります。承認されるまではコメントは表示されません。そのときはしばらく待ってください。)


2009年03月16日


PHP で RSS ファイルのラッパーをつくる

スパイスラボ神部です。


CakePHP を使って RSS を出力したところまではすごく順調だったのだけど、なぜか http://clipmail.jp/clips/rss.rss のように冒頭に改行が入ってしまい、well-formed な XML ファイルとして認識されないためにエラーが出まくり。


フォーラムで質問させてもらうなどしたが、なかなか原因のファイルがつきとめられないため、ちょろっと wrapper を書いてごまかすことにした。


-ラッパーが好きだ! - Favorites!


フィードラッピングのための細かな工夫あれこれ


ラッパーをつくったおかけで、冒頭の改行を取り除くのと XML 宣言を出力するのは問題なく完了。


しか今回は RSS フィードの出力ファイルのラッパーなのだから、last-modified がきちんと出ていた方がベターだろう、ということでそのあたりの工夫をしてみた。


1.最終更新日時を取得する


下記の方法で出来そうな気がしたが・・・


-ページの最終更新日を表示する方法


実際はブランクになってしまったので、PEAR の XML_RSS ライブラリで最新のアイテムを取得し、その pubdate から最終更新日時を得た。


2.HTTP ヘッダで最終更新日時を出力する


おそらくヘッダのファイル更新日時は参考にしている RSS リーダーの類は多いはずなので、ここに1.で得た値をはめこんでおく。やりかたは下記のエントリの通り。


-PHPで「Last-Modified」を送信する


3.念のため Content-type を指定


HTTPヘッダを見てくれる UA のために、PHP でテキスト出力部分より前に、下記のようなコードを追加しておく。


header('Content-type: application/rss+xml; charset=utf-8');


4.Sleipnir 対策に、呼び出し URL をいじる


Sleipnir は HTTP ヘッダは無視するようなので(そもそも RSS-Auto-Discovery もないようだ)、


http://clipmail.jp/clipmailrss.php


というものから


http://clipmail.jp/clipmailrss.php?cmd=rss


という URL をごまかしでつけてやると、拡張子が php でも RSS フィードのレンダリング用エンジンで描画してくれる(※中身もヘッダも全く同じ)。


まとめ


最終的なラッパーの出力はこのとおり。


http://clipmail.jp/clipmailrss.php?cmd=rss


とりあえずこのような感じでした。
 

ブックマークに追加する

トラックバック

このエントリーのトラックバックURL:
http://www.spicebox.jp/cgi-bin/mt/mt-tb.cgi/904

コメントを投稿

(いままで、ここでコメントしたことがないときは、コメントを表示する前にこのブログのオーナーの承認が必要になることがあります。承認されるまではコメントは表示されません。そのときはしばらく待ってください。)


2009年01月20日


PHP で復号可能な暗号化を行うときのまとめ

スパイスラボ神部です。


ちょっとわけあって、PHP で復号可能な暗号化を処理を組み込むことになりました。いったん暗号化して DB に格納し、あとで復号するという手順です。


さすがに生でパスワードを格納するのは嫌ですし、調べてみると意外と全体の流れを解説したものはあまり多くはなかったもよう。せっかくですのでスタンダードな暗号化/復号についてまとめてみたいと思います。


-暗号化が好きだ! - Favorites!


順を追ってあたりをつけていきます


けっこう情報が少ないので、順を追って調べていきます。


-PHPの可逆暗号化関数について - 教えて!goo


とりあえず、mcrypt 系を使うのがよさそうだ、というヒントが得られました。


-PHP: mcrypt_generic - Manual


まずは上から mcrypt_cbc がいいかな?と思ってみてみると、mcrypt_generic を使うように促されます。


-PHPにてmcrypt_genericを利用しパスワードを暗号化して格納したいと思っています。 プログラムソースはUTF-8です。 このときに、暗号化後の文字列を正常にデータベースに格.. - 人力検索はてな


上記にも描かれていますが、MySQL に格納する際は大き目の blog タイプのテーブルを作るといいようです。


-mcrypt_module_open - PHPプロ!マニュアル


mcrypt_module_open と mcrypt_module_close による全体の流れの確認。


具体的な例が見つかりました


-mdecrypt_generic


こちらの末尾に、mcrypt_generic を使った例が追記されているので、参考にしましょう(私の場合はどうも暗号化済みの文字列の格納がうまくいかなかったので、テーブルをテキストにして base64 エンコードしたものをほうり込むことにしました)ただし上記のサンプルで注意が必要なのは、コードが二つに分かれてしまうと $iv が別々の物になってしまう点です。


-PHPの調べ物:暗号化-mcrypt - 美味しいもの - Yahoo!ブログ


こちらを参考に、与える $key をベースに $iv を暗号化時と復号時で同一にします。


ここまでの情報で、ひととおりの暗号化・復号は可能になりました。


参考になったでしょうか。


追記:○復号化 ×複合化


誤字に気をつけなきゃと思っていたのに、まんまと間違ってしまいました。


○復号化

×複合化


みなさまも復号可能な暗号化エントリを書く際にはお気をつけて・・・


追記2:Flash で復号


ウノウラボさん、こんなこともやってる。


-ウノウラボ Unoh Labs: PHPで暗号化して、Flashで復号してみたときのメモ


これはどこかで役に立ちそう…


追記3:○復号 ×復号化


はてなブックマークのコメントで、


○復号
×復号化


という指摘がありました。


これはどこまで直すべきかどうかわからないのですが、とりあえず読みやすさもあるので復号に直してみました。


セキュリティ用語事典 [暗号化/復号(復号化)] とかは微妙な表記ですね。


英辞郎ではこんな感じです。


“decryption”の検索結果(10 件):英辞郎 on the Web:スペースアルク


いっそのこと「暗号化/暗号解読」としてしまいたくなります。


 

ブックマークに追加する

トラックバック

このエントリーのトラックバックURL:
http://www.spicebox.jp/cgi-bin/mt/mt-tb.cgi/748

コメントを投稿

(いままで、ここでコメントしたことがないときは、コメントを表示する前にこのブログのオーナーの承認が必要になることがあります。承認されるまではコメントは表示されません。そのときはしばらく待ってください。)


2009年01月14日


Mac で Basic 認証下での Flash ファイルアップロード不可問題の回避方法

スパイスラボ神部です。


企業のキャンペーンサイト制作などにご一緒させていただいていると、Flash の動作確認にはいろいろ苦慮することになりますが、特に大きな壁として flashによるファイルアップロードと認証に関するジレンマ - hanai にあるような


・Mac の場合、どのブラウザでも Basic 認証下ではファイルアップロードできない


という問題があります。


実はこれは Flash プラグインとしての正しい挙動で、Basic 認証下ではファイルをダウンロードさせる動作以外はサポート外なもようです(Windows 版の Flash プラグインが仕様外の部分でたまたま成功させているだけらしい)。


FileReference API の機能とセキュリティについて


サーバーが認証を必要とする場合、唯一正常に実行できる可能性があるのは、Flash Player ブラウザプラグインを使ったファイルのダウンロードです。すべての Flash Player でのアップロードや、スタンドアローンもしくは外部の Flash Player を使ってのダウンロードは、認証を必要とするサーバーでは成功しません。


では、この問題はどうやって回避したらいいでしょうか。


-Basic認証が好きだ! - Favorites!


PHP のセッションを使って簡易な認証を行う


いきなり答えを書いてしまいましたが、この方法であればとりあえずファイルアップロードが出来ない状態を回避でき、また一種の「認証を経由した」ような効果の元で、クローズドにページの内容を確認する/してもらうことができます。


※PHP のセッション機能を使いこなしている人には、ここから先は一行も読む必要はありません。Basic 認証しか知らない人のために、Flash 確認のための回避策をまとめているだけということをご了承いただければと思います。


まずは基本的なルール作り


簡単で基本的なルールとして


・セッションというものを使う


・セッションはセッションに応じた変数を持つことができる


・セッション変数の中身をチェックすることで、コンテンツを表示するかしないかを決める


というものを頭に思い浮かべてみてください。


実際にセッションを使うときのお作法


セッションを開始するには、Basic 認証のようなポップアップダイアログではなく、mixi などの SNS にログインするときのように HTML フォームを使って自分自身を認証するフレーズやパスワードを渡すのが一般的です。


フォームの値は POST で渡すのがよいでしょう。続いて受け渡されたユーザ名とパスワードのペアを、適切な方法で認証します。最も単純で危険な方法としては、平文で渡されたそれらの値を、ソースコードに直に書かれた値と比較することです。ここは最低でも別ファイルで define したものを使うべきでしょうが、ここでは説明のために本文に直書きしておきます。


<?php
$username = htmlspecialchars($_POST['username']);
$pass = htmlspecialchars($_POST['password']);
if($username = "username" && $pass == "password"){
session_start();
$_SESSION['auth'] = true;
}
?>


ここでは、username が username、パスワードの変数 $pass が password だったときに許可されたユーザであると判断することで、session_start(); でセッションを開始しています。また同時にセッション変数である $_SESSION の 'auth' という値を true に設定します。このセッション変数は、セッションが破棄されるまで同じサイト内で継続しますので、この性質を利用して、本来隠したい情報があるページに誘導します。


セッションの有無による場合分け


一般には隠したい情報があるページに、固定リンクなどでユーザを誘導したとしましょう。その場合、真っ先に行うのはこのページでのセッション開始と、セッション変数の中に格納されている auth の値のチェックです。


<?php

session_start();
if($_SESSION['auth'] != true){
exit;
}

?>


ここでやっていることはとても簡単です。セッション変数の中に格納されている auth の値が ture でなければ、直ちにページの表示を中止して exit する、というものです。これであれば、別のページでセッションを開始して、なおかつ auth の値が true でない限りはページの内容を見ることはできません。


ということで、理屈上ではこれで一応セッションを使った認証のできあがりになります。


セッションを使うときの注意点


PHP でセッションを使う場合、デフォルトでは PHP:セッション情報をDBに持つ にありますようにファイルです。また負荷分散のためにセッション情報をDBに持つことがある、というのもこの記事の趣旨です。

session.use_cookies を ON にする などしてセッション情報を Cookie で管理する時は、セッション管理/PHP入門 にあるような点に注意が必要です。


ログアウトも実装しておこう


利用して終わった後しばらくはセッション情報がサーバに残ることで、ブラウザを再起動したあともそのサイトに接続出来てしまう場合があります。より積極的に退場してもらうために、ログアウトのリンクも付け足しておきましょう。そのリンクを辿った先のページには、下記のようなコードを置いて確実にセッション情報を破棄しておきましょう。


<?php

$cmd = htmlspecialchars($_POST['cmd']);
if($cmd == "logout"){
session_destroy();
}

?>


POST で "logout" というコマンドが渡されたときに、session_destroy(); を呼ぶというだけのスクリプトです。


まとめ


今回私も Basic 環境下で Mac のファイルアップロードをテストしなければいけないという特殊な状況に陥ったため、ウェブ上を探したのですがこれといってスマートな解決方法が無く、PHP の知識を用いてひとつの問題解決の方法を見いだしたところがありました。


Flash の動作確認をクローズドな環境下でクロスブラウザでしなければならない、という立場に陥る人の場合は、Basic 認証以外にたどりつくのは意外と難しいことのように思いますので、このエントリがなにかの一助になればと思います。


とはいえあまりにもニッチなノウハウなので時間をかけて共有するのもどうかなあ、と思っていたのですが、.htaccessでベーシック認証 | バシャログ。 というエントリのブックマークで id:Layzie などから選択範囲つきでスターをいただいたため、1エントリ起こすことにしてみました。


こんな感じでどうですか。報酬は1ブクマでいいぜ…


※なお表示のため、<?php の開ブランケットは全角にしてあります。ソースコードとしてコピーする場合はご注意ください。

 

ブックマークに追加する

トラックバック

このエントリーのトラックバックURL:
http://www.spicebox.jp/cgi-bin/mt/mt-tb.cgi/706

コメント ( 1 )

Layzie :

はてブでスターを付けさせて頂いただけなのにこんなに良質なエントリを上げて頂いて感謝しています。

非常に勉強になりました!

Mac使ってるんで非常に助かります。
インターネットっていいなあ。
ありがとうございました!

コメントを投稿

(いままで、ここでコメントしたことがないときは、コメントを表示する前にこのブログのオーナーの承認が必要になることがあります。承認されるまではコメントは表示されません。そのときはしばらく待ってください。)


2008年10月09日


PHP から OpenCV を使ってみました

スパイスラボ神部です。


このところテキストネタエントリばかりだったので久々にコードネタで。


今までもっぱら C++ から制御していた OpenCV ですが、PHP の拡張機能(バインディング?)として OpenCV を制御する関数を書いてくださっている方がいましたので、こちらを実際に利用するまでの流れを簡単にまとめておきたいとおもいます。


まず下ごしらえとしてはこちらのエントリ。


-PHPで顔検出の続き ネットに花を咲かせましょう。 会社作りました。

pecl-gen -f face_detect.xml

cd face_detect

phpize

./configure

make

make install

おー、すごい。このやりかた(codegen -> phpize という流れ?)は優秀ですね!XML の内部に直接 C++ のコードを書いてしまうことで、簡単に拡張機能が作れてしまう。これはちょっとエポックメイキングに感じますが、良くある手法なのでしょうか? Mozilla 系プロダクトもこういう感じのソース埋め込みしているのあったりするのかなど、ちょっと気になります。


※pecl-gen を使うには pear install -a codegen_pecl


※phpize を使うには yum install php-devel


php.ini の設定はこちらが詳しい。


-OpenCV の PHP バインディングを書いてみた - font-family: monospace


extension=opencv.so


※今回の場合は次のような感じかも。


extension=face_detect.so


もし、今回はcodegen を使う必要がありましたが、そちらや phpize の入れ方はPHPで顔検出の続き ネットに花を咲かせましょう。 会社作りました。Cases and Materials:yumでsqliteのインストールなどに書かれています。


それはさておき、いざコンパイルとなると厳しすぎるバージョンチェックのため動かない時があります。そんなときはこちらを参考に必要箇所を差し替えてみましょう。


-PHPのエクステンションを作ってみる - ぱせらんメモ


つまり例えば、


#if PHP_VERSION_ID < 40000



#if PHP_MAJOR_VERSION < 4


に直すなど。


これをやる必要があるのは、configure ファイルと config.m4 の両方だったりするので要注意です。PHP 5.1 以降でもコンパイル失敗します(参考:実例で学ぶPHP拡張モジュールの作り方:第3回 WEBカメラから画像をキャプチャ|gihyo.jp … 技術評論社


まあ、そんなところでしょうか。とりあえず顔の検出くらいなら、元の記事に書かれているごく短いサンプルコードを書くだけで、ちゃんと配列に検出された顔の位置や大きさを返してくれます。エラーもなくなかなかよい感じに動いてくれています。PHP で値をこねくり回せるとなると、ますます手軽にいろいろなことができそうですね。

 

ブックマークに追加する

トラックバック

このエントリーのトラックバックURL:
http://www.spicebox.jp/cgi-bin/mt/mt-tb.cgi/480

コメントを投稿

(いままで、ここでコメントしたことがないときは、コメントを表示する前にこのブログのオーナーの承認が必要になることがあります。承認されるまではコメントは表示されません。そのときはしばらく待ってください。)


2008年09月15日


PHP 4 と PHP 5 それぞれの XML 文書パージング方法まとめ

ラボ神部です。


いろいろなウェブサービスの API を利用する際、毎回スキーマの異なる XML 文書から必要な箇所を抜き出すのは苦労するものです。DOM を使うにも構文が複雑ですし、PEAR の XML_RSS ライブラリのように毎回同じ書式でやればいいというわけでもありません。


(例えば、そう、こんな感じで。)

require_once("XML/RSS.php"); $rss =& new XML_RSS($rss_url);

$rss->parse();

foreach ($rss->getItems() as $item) {

//$item に対して何かの処理

}


しかし、Keith Devens .com - PHP XML Library, version 1.2b で配布されている xml.php を読み込むだけで、どんな XML スキーマの XML ドキュメントでも、とりあえずは PHP の配列に取り込むことができます。


(こんな風に)

include('xml.php');

$data = XML_unserialize($xml);


さらに、配列を XML 化することも出来ちゃうようです。

include('xml.php'); $xml = XML_serialize($data);


これはすごい!


今まで面白そうな API が公開されていても、parsing の処理の手間を考えるとちょっと手をつけにくいなと思っていたものも、気軽に試すことが出来そうですね。こういう部分の敷居がグッと下がるのはとっても助かります。ブックマークのコメント を見ると、2005年当時からあったようですが、いまいちこれで決め手という感じもないですね。


もう少し調べてみると、PHP4でxmlのパース処理をする方法はいくつかあるようですが、いずれもくせがあるようです。自分的には、xml.php 的な使い方がすごく使いやすいので、PHP4 な環境ではこれで行こうかとも思いますが。


ちなみに、PHP のバージョンが 5 以降なら、SimpleXML関数simplexml_load_string - PHPマニュアル を使うのが正しいようです。DOM風に要素を取り出す方法もあるようですがPHP5を試してみる - SimpleXML関数でRSSしてみる - Do You PHP? で紹介されているように、要素名の配列から子要素を $parent->child という形で呼び出すのが扱いやすそうですね。


$article = simplexml_load_file('test.xml');
echo $article->subject;

このあたりはもう少し研究してみたいと思います。一度身につけておけばそれでずっと使えるものでしょうから。


(追記)


外部サーバのファイルオープンを禁止していると、SimpleXML は使えないようです。地味ですがこちらも注意。


薬箱 - PHP simplexml_load_file 関数について


 

ブックマークに追加する

トラックバック

このエントリーのトラックバックURL:
http://www.spicebox.jp/cgi-bin/mt/mt-tb.cgi/438

コメントを投稿

(いままで、ここでコメントしたことがないときは、コメントを表示する前にこのブログのオーナーの承認が必要になることがあります。承認されるまではコメントは表示されません。そのときはしばらく待ってください。)


2008年09月02日


PHP の PEAR ライブラリ XML_RSS で RSS ではなく Atom を読み込ませたい

ラボ神部です。


PHP の PEAR ライブラリ XML_RSS はよく働いてくれ本当に助かっていますが、RSS ではなく Atom を読み込ませたいときには少し困ってしまいます。そういうときはブログのタイトルと偽りありで申し訳ありませんが XML_RSS ではなく素直に XML_Feed_Parser を使いましょう。


詳しくはこちらのブログで。


-Atomのフィードを取得できるPEARのライブラリ XML_Feed_Parser (たつやブログ)


XML_RSS と XML_Feed_Parser の扱いはほとんど同じですが、若干違うのは、


XML_RSSでは

$rss =& new XML_RSS("http://rss.slashdot.org/Slashdot/slashdot"); $rss->parse();

と初期化するところを、

XML_Feed_Parser では

$text = file_get_contents($atom_url); $feed = new XML_Feed_Parser($text);

と二段階で行い、


値の取り出しは

foreach のイテレータで $item で取り出したとき、

XML _RSS では

$item['title']

とるすところを、

XML_Feed_Parser では

$item->title

と取り出すところくらいです。


元のフィードの種類で自動的に切り替わるような関数をつくってみても便利かもしれませんね。

 

ブックマークに追加する

トラックバック

このエントリーのトラックバックURL:
http://www.spicebox.jp/cgi-bin/mt/mt-tb.cgi/422

コメントを投稿

(いままで、ここでコメントしたことがないときは、コメントを表示する前にこのブログのオーナーの承認が必要になることがあります。承認されるまではコメントは表示されません。そのときはしばらく待ってください。)


2008年02月06日


CakePHP でいってみる


by craigbbaker


月が変わってもう如月、2008年2月が私のフレームワークはじめになりました。


Gree で使われている Entha については少し調べたり、Ruby on Rails や Symphony に関してはうわさを聞くことも多かったのですが、実際にフレームワークを使って開発に励むのは今回が初めてです。


導入にあたっては各種公式リソースや日本語コミュニティのフォーラムの情報を大いに参考にさせていただいたほか、CakePHP修行! アーカイブ | IDEA*IDEA の一連のエントリも興味深く読ませていただいています。エントリの内容がたびたび CakePHPで高速Webアプリ開発:第1回 CakePHPを使いたくなる5つの特徴 を書かれている akiyan 氏の PHP カテゴリー とのかけあいになっているのが面白かったです(笑)akiyan 氏は昨日奇しくも某所で AA-camp に参加されていたようですが参加できず残念でした。


具体的な成果はなんとか今月中に出して生きたいと思います。前回の AA-camp でいただいた 超・極める! PHP: 本: 秋元 裕樹,市橋 一宣,大垣 靖男,小山 哲志,上鍵 忠志,高橋 邦彦,田中 正裕,月宮 紀柳,鶴岡 達也,鶴岡 直也 を参考に、フレームワークのイロハや、ほかの(PHP)フレームワークの良さなどをじっくり見てみたいと思っています。


導入についてあちこち悩んだ点は、個人ブログの CakePHP の項目にまとめてあります。DreamWeaver 連携の話も書いてますのでご興味のある方はどうぞ。


なによりこれでフレームワーク談義に参加できそうなのが嬉しいです。フレームワーク使用の後押しをしてくれた studio15.jp さん、ありがとうございました!

 

ブックマークに追加する

トラックバック

このエントリーのトラックバックURL:
http://www.spicebox.jp/cgi-bin/mt/mt-tb.cgi/324

コメントを投稿

(いままで、ここでコメントしたことがないときは、コメントを表示する前にこのブログのオーナーの承認が必要になることがあります。承認されるまではコメントは表示されません。そのときはしばらく待ってください。)