diary/category/プログラミング

ID: 33 | 作成日: 2009/08/12 [Wed] 17:06:00 | 最終更新: 2012/09/12 [Wed] 16:07:55
FrontPage / diary / category / プログラミング

2008/09/26 [Fri]

利用Wikiクローンの添付ファイル処理を改変

今日は、利用しているWikiクローンの添付ファイル保存ディレクトリを変更する改変作業をしました。

かなり前からこれをやりたいと思っていたのですが、そうなると「添付ファイルや関連ディレクトリを新しいディレクトリに移動させて元の添付ファイルを削除」をプログラムを作ってやらせるなり手動でやるなりしないといけないため、それが面倒でなかなか改変に手を付けなかったんですよね。

まずは添付ファイルのコピー&削除プログラムを作って、ちゃんと動くのを確認してから・・・ということで取り掛かってみると意外と簡単にプログラムが完成。
面倒な処理の部分をWikiクローンで提供されていた便利関数を使い回ししたので、開発時間を短縮することができまた。

いざ作業に取り掛かってみると、結局Wikiクローン側の改変も含めて一時間掛からずに完了しました。

ファイルやディレクトリのコピーにはPHPの「system」からLinuxのコマンドを利用して行ったのですが、その辺の話は後日ブログのネタにでもできたらと思います。

2008/09/14 [Sun]

XAMPP1.6.7のPHP4でSQLiteを使う

PHPの開発環境の導入には「XAMPP」(Windows版)を利用しているのですが、最近HDDの交換に伴い再インストールしたときに行ったSQLite導入のメモです。

去年にインストールして使っていたXAMPPでは別段設定しなくてもPHP4の環境で「SQLite」を使えたのですが、先日インストールしたXAMPPの現時点での最新バージョン「1.6.7」ではSQLiteを利用するスクリプトがうまく動かず、phpinfo()でもSQLiteの項目が表示されない状態に。
そこで、SQLiteを動かすための環境を整えることにします。

調べてみたらどうもPHP4でSQLiteを動かすためのDLLファイル「php_sqlite.dll」がないようなので、 まずはそちらを入手します。
ということで、「PECL4WIN :: The PECL Windows Repository」から「php-4.4.1」のphp_sqlite.dllをダウンロード。

続いてXAMPPがインストールされている場所の「php\extensions」フォルダ(例えば「C:\xampp」にインストールしている場合「C:\xampp\php\extensions」)に、php_sqlite.dllをコピーします。
ちなみに「extension_dir」の場所は、「phpinfo()」で確認できます。

僕の場合はデフォルトの段階から有効になっていたのですが、もし「php.ini」の「extension=php_sqlite.dll」の部分がコメントアウトしてあった場合は行頭の「;」を削除して有効化、記述されていない場合は書き加えてください。
「php.ini」はXAMPPがインストールされている場所の「apache\bin」フォルダにあります。

以上の方法で、僕の環境では上手くいきました。
もしかしたら、「go-pear.bat」みたいにバッチとかあるのかなぁ。

PHP5だと標準でSQLiteが入っているようですが、利用しているレンタルサーバがPHP4なので開発環境もそちら準拠でないといけないですから。

2008/09/03 [Wed]

「mooom API」からページとサムネイルのURLを判断

※ 2012/7/9追記 現在、"mooom"のサービスは終了しています。

動画共有サービス「mooom」のAPIを試したのですが、このAPIのページに書かれている解説が少なすぎてプログラム制作時にちょっと迷った部分があったので、その辺のメモ&解説をします。

正直、ここのサービス自体がマイナーなようなので、ちょっと需要があるかどうか疑問なのですが参考になれば幸いです。

今回、利用したのは「mooom API」の動画リスト検索リクエスト「search_Movies」です。

これは動画のタイトルまたはタグ名から検索できるものなのですが、返されてくる値には肝心の動画が公開されているページのURLが含まれていません。
この手のAPIだと、他に動画のサムネイルのURLとかFlashの動画プレーヤーのURL等も含まれる場合が大半ですが、それらも含まれていません。

最初、返された値を見て「えっ !?」と思ったわけですが、APIの紹介ページの上部に「URL規則について」・「RSS (RSS2.0 width enclosure)について」・「FLV・iPod/PSP用データの取得」・「ムービー・サムネールの取得」・「ユーザー・アイコンの取得」という項目があり、そこに書かれているURLの法則にAPIから取得した値を当てはめてページやサムネイル・プレーヤー等のURLを判断するようになっています。

APIの動画リスト検索リクエスト「search_Movies」で得られる個別動画のデータのなかに「mid」・「name」があり、前者が動画ID、後者がユーザーネームになります。
今回の追加作業で実際に利用したのが動画のタイトルと動画ページとサムネイルのURLで、タイトルはそのままAPIから分かりますが、URLについては前述の動画ID・ユーザーネームを「mooom」のURL規則に当てはめなくてはいけません。

まずは各動画ページのURLのサンプルから。

http://mooom.jp/ユーザーネーム/movies/movie/動画ID/

続いて、サムネイルのURL。
画像のサイズは「160×120」になります。

http://mooom.jp/images/thumbE/動画ID/

サムネイルのサイズは「thumbE」の部分を変更することで「thumbA」~「thumbE」の5種類から選べます。

僕が試したのが前に書いたとおり動画ページとサムネイルのURLのみなので、サンプルはその二つしか書きませんが、他の各種URL等も同様の方法で取得することになります。

API情報ページの説明が少ないので、初めて「mooom」のAPIを試した場合ちょっとこの辺は迷う場合もありそうだなぁと。
ただ、このパターンだと「返される値を少なくして得られる情報は多くできる」ため、公式のリファレンスさえ詳細に書かれていたら便利なのですが。
サービス自体がマイナーそうなので、あまり需要もなさそうですが、せっかく試したので一応記事にしてみました。

2008/08/29 [Fri]

「Yahoo!地図API」Flash版のアイコンを一括設定

「Yahoo!地図API Flash版」を使っているのですが、先日、地図アイコンを配置する関数を複数のアイコンを一括して配置できる「addIcons()」を導入。

これまでのものは、ネットで見つけたサンプルを参考にJavaScriptの繰り返し系の命令で「addIcon()」で一個ずつ配置していました。
Yahoo!のリファレンスを見て一括設定があることは知っていたけど、その解説が説明なさ過ぎで正直やり方わからなかったというのがそうしていた一番の理由。

でもやはり一括配置の関数のほうがいいだろうとアイコン変更の流れで手を付けたわけですが、今回はそのやり方を書いておきます。

なお、「addIcon()」関数に関連する部分の抜粋のみで、Yahoo!地図APIそのものの導入の仕方はここでは書かれていませんのでご注意ください。

「Flash版地図API Version 2リファレンスマニュアル」の「addIcons(pois)」の項目には

複数のアイコンを追加します。追加したアイコンは、すべての縮尺で表示されます。
パラメータ:

•pois - アイコンリスト

としか書かれていません。

「pois」の部分にアイコン配置に関するパラメータを当て込むわけですが、やり方としてはJavaScript版の同種の関数と同じでJSONオブジェクト形式で「pois」にデータを入れます。
で、JavaScript版とFlash版ではアイコンをひとつずつ追加する「addIcon()」関数は名前は同じですがパラメータが若干違います。
一括追加の「addIcons()」でもそれは同じで、Flash版はFlash版「addIcon()」関数のパラメータを参考にJSONオブジェクトの形にアイコンデータを書き出していきます。

以下はアイコンのJSONオブジェクトの配列の見本です。

var icons = [
	{popup: '吹き出し1', lat: '緯度1', lon: '経度1', id: 'アイコン ID1', cat: 'L1' },
	{popup: '吹き出し2', lat: '緯度2', lon: '経度2', id: 'アイコン ID2', cat: 'L2' },
	{popup: '吹き出し3', lat: '緯度3', lon: '経度3', id: 'アイコン ID3', cat: 'L3' }
];

実際に試すときは、それぞれの環境にあわせて任意に書き換えてください。
あとは、「addIcons()」の「()」内にアイコンデータを入れた変数(上記サンプルの場合「icons」)を「addIcons(icons);」というように記述します。

一応、パラメータの説明をすると

popup
アイコンにカーソルを当てたりしたときに表示されるツールチップ。
lat
緯度。
lon
経度。
id
アイコンに割り振るID。
cat
アイコンの種類の指定、このパラメータは省略可能です。

JavaScriptやFlashに明るかったら「あの」説明でも充分ってわけではないと思うのだけど、もうちょっと詳細に書いていてほしいですね。

2008/08/27 [Wed]

「サグールテレビ API」を試してみました&サンプル

運営しているコンテンツのひとつに何か検索できる項目増やそうかなぁと、「サグールテレビ」のAPIをちょっと試しました。

結局導入自体は見送ったのですが、この「サグールテレビ検索 Ajax API」そのものはJavaScriptで呼び出すのでサーバ環境は関係ないし、APIの解説ページに書かれているサンプルソースをほとんどそのまま貼り付けるだけで動画検索機能を呼び出せるため、手軽にサイトに導入できていいなぁと。

自分で試す上で情報をとネットで探してみたけどサンプルとかちょっと見つけられなかったので、APIページのサンプルコードとほとんど変わらないですが、自分用メモも兼ねて簡単なサンプルコードを書こうと思います。

「サグールテレビ」は複数の動画共有サイトから検索することができるWebサービスで、再生リストに動画を登録して複数の動画を連続再生といった機能をブラウザ上で行うことができます。

そして「サグールテレビ検索 Ajax API」は、その「複数の動画共有サイト検索機能」を自分のサイトに追加することができるAPIです。

それではまず一番簡単なパターンということで、サイトに検索フォームを表示させます。
以下のものも含めて、このエントリーに書かれているサンプルの文字コードは「UTF-8」でローカル環境で試したものです。

<html>
	<head>
		<meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
		<script src="http://sagool.tv/web/js/sagoolTvSearchAjaxApi.js" type="text/javascript"></script>
		<script>
		<!--
			sagool.sagooltv.setClientUrl("サイトのURL");
		//-->
		</script>
	</head>
	<body>
		<div id="sagoolTvSearch">
			ここに動画の検索フォームや検索結果が表示されます。
		</div>
	</body>
</html>

上記を実行すると、「div」の部分に検索フォームや動画の検索結果が表示されます。
デフォルトの設定では、「<div id="sagoolTvSearch">」と「</div>」の間が検索フォームや検索結果の表示部になります。

どういった表示をさせるにしても、まず最低限

  • <script src="http://sagool.tv/web/js/sagoolTvSearchAjaxApi.js" type="text/javascript"></script>
  • 「script」タグ内の「sagool.sagooltv.setClientUrl("サイトのURL");」
  • <div id="sagoolTvSearch">~</div>

の部分が記述されている必要があります。
「sagool.sagooltv.setClientUrl」の「サイトのURL」の部分は、APIを利用するサイトのURLに書き換えてください。

続いて、ページが立ち上がった段階から指定した検索ワードによる動画検索結果を表示させます。

<html>
	<head>
		<meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
		<script src="http://sagool.tv/web/js/sagoolTvSearchAjaxApi.js" type="text/javascript"></script>
		<script>
		<!--
			sagool.sagooltv.setClientUrl("サイトのURL");
			sagool.sagooltv.setInitialQuery("TEST");
		//-->
		</script>
	</head>
	<body>
		<div id="sagoolTvSearch">
			ここに動画の検索フォームや検索結果が表示されます。
		</div>
	</body>
</html>

サンプルでは「TEST」を検索ワードに動画検索した結果が表示させます。

「sagool.sagooltv.setInitialQuery("検索ワード");」が初期クリエの設定となっており、ここで指定している検索ワード(サンプルでは「TEST」と書かれている部分)による動画検索結果がページが読み込まれたときに表示されるので、初めから検索結果を表示させたい場合はコレを使います。

次は、上のサンプルに若干追加したものです。

<html>
	<head>
		<meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
		<script src="http://sagool.tv/web/js/sagoolTvSearchAjaxApi.js" type="text/javascript"></script>
		<script>
		<!--
			sagool.sagooltv.setClientUrl("サイトのURL");
			sagool.sagooltv.setInitialQuery("TEST");
		//-->
		</script>
	</head>
	<body>
		<p>
			<a href="javascript:sagool.sagooltv.search('テスト');">テスト</a>の動画を検索。
			<a href="javascript:sagool.sagooltv.search('てすと');">てすと</a>の動画を検索。
		</p>
		<div id="sagoolTvSearch">
			ここに動画の検索フォームや検索結果が表示されます。
		</div>
	</body>
</html>

サンプルを実行すると、まず検索フォームと「TEST」で動画検索した結果が表示されます。
そして、リンク文字「テスト」をクリックすると「テスト」の検索結果、「てすと」をクリックすると「てすと」の検索結果に切り替わります。

「sagool.sagooltv.search("検索ワード");」で新たに指定キーワードで動画検索した結果を呼び出すことができます。
サンプルだと「a」タグの「javascript:」以降に書かれている部分がそれになります。

他にもいくつかの機能が用意されており、たとえば「sagool.sagooltv.setForm(0);」を「head」の「script」タグの間に追記することで検索フォームが非表示の状態なるので、ページが表示されたときに検索結果のみにしたい場合はコチラを利用します。

通常、複数の動画関連サイトの検索を導入しようと思うと、それぞれのサービスが提供するAPIなり検索結果のRSSなりを呼び出さないといけませんが、サグールテレビAPIなら、これひとつで数十というサイトから一括した検索結果を得ることができます。
現段階では表示件数や結果表示のパターン(サムネイルのみとかテキストのみ等)といった設定の関数が用意されていないのが気になりますが、簡単な手続きでこの機能が利用できるのはいいですね。

やっぱり何かのサイトかコンテンツに使ってみたいかな。