logo logo_banner

PHP の最近のブログ記事


PHP5のSimpleXMLでRSSを取得して新着投稿をリスト表示する。

PHP5から使えるようになったSimpleXMLを使うとXMLの要素の内容を簡単に読み込むことができるようになりました。

この機能を使って、変数にブログのRSSを読み込ませて新着記事を5件分表示するスクリプトを作成してみました。

 

<?php

//読み込みたいXMLのパス
$rssurl = "http://hoshiya.biz/blog/index.xml";

$rssdata = simplexml_load_file($rssurl);

//表示件数
$num_of_data = 5;

$outdata = "<ul>";
	for ($i=0; $i<$num_of_data; $i++){
	  $outdata .= "<li>";
	  $outdata .= "<a href=\"";
	  $outdata .= $rssdata->channel->item[$i]->link;
	  $outdata .= "\">";
	  $outdata .= $rssdata->channel->item[$i]->title;
	  $outdata .= "</a>\n";
	  $outdata .= $rssdata->channel->item[$i]->pubDate;
	  $outdata .= "</li>";
	 }
  $outdata .= "</ul>";		 

print $outdata;

?>

こうしてできたこのブログの新着記事5件のリストの表示が以下。

 

 

表示ができない場合は以下のように「channel->」を省いてみてください。

$rssdata->item[$i]->title;

 

参考ページ

トラックバック(0)

トラックバックURL:


ライブラリをインクルードしてたった数行で、WEBスクレイピング(HTML内を部分的に取り出し、表示する)ができる恐ろしいPHPライブラリを見つけました。

ライブラリは上記よりダウンロードできます。

<?php

    include_once($_SERVER['DOCUMENT_ROOT']."/lib/simplehtmldom/simple_html_dom.php");
    
    $html = file_get_html('http://hoshiya.biz');  
       
    foreach($html->find('title') as $row)
    $row = $row->plaintext;
    $row = mb_convert_encoding($row, mb_internal_encoding(), "auto" );  
    echo $row;

?>

たったこれだけで取得できます。

find()で取り出したい条件や要素を記入するだけです。

恐ろしく簡単で便利なのはタグはもちろん、idやclassも指定できるし、そのタグ自体を抽出することもできます。

検索結果の一覧や、リンク集なども楽に抽出ができそうな感じです。

その他の使い方などは「PHP Simple HTML DOM Parserマニュアルページ」を参照してみてください。

参考サイト

関連記事

トラックバック(0)

トラックバックURL:


指定したURLのHTMLソースから目的のタグ内の文字列をSQL文で取り出すことができるライブラリを見つけました。

今までは正規表現を使って文字列を取得していましたが、このライブラリならタグはもちろん、idやclassまで検索対象にできるスグレモノで、SQLの文法と配列が理解できれば、いろいろなことに使えそうです。

このように「HTML内を部分的に取り出し、表示する」ことを「Webスクレイピング」というそうです。

使用準備

  • ライブラリをダウンロードして任意のディレクトにアップロード。
  • 利用するファイルに「snoopy.class.php」と「htmlsql.class.php」をインクルード。

使用例

<?php

include_once($_SERVER['DOCUMENT_ROOT']."/lib/snoopy.class.php");
include_once($_SERVER['DOCUMENT_ROOT']."/lib/htmlsql.class.php");

function getTitle($url){

	$wsql = new htmlsql();
	
	// connect to a URL
	if (!$wsql->connect('url', $url )){
	print 'Error while connecting: ' . $wsql->error;
	exit;
	}
	
	// execute a query:
	if (!$wsql->query('SELECT * FROM title')){
	print "Query error: " . $wsql->error;
	exit;
	}
	
	// show results:
	foreach($wsql->fetch_array() as $row){
	
	//print_r($row);
	echo $row['text'];
		
	}

}

getTitle("http://hoshiya.biz");

?>

ちなみに、print_r($row)とすると、$rowに格納されている配列の内容が確認できます。

$rowの中身→ Array ( [tagname] => title [text] => 星屋工作室 )

例文

その他の例文はまた今度...。

制限

<div>の中の<div>など、同じタグに囲まれている文字列や要素はダイレクトに取得できず、一度大枠を取得して、再度その中から抜き出さなければならないようです。

関連記事

トラックバック(0)

トラックバックURL:


タイトルの通りですが、今まで使用できていたPHPのインクルードが急に使えなくなりました。

PHPのバージョンを5.2から5.3に変更したからかもしれませんが、以下のエラーが出ます。

Warning: include_once() [function.include-once]: http:// wrapper is disabled in the server configuration by allow_url_include=0 in/home/users/2/lolipop.jp-dp********/web/tracking/index.php on line 182

 

結論からいうと、インクルードするファイルのパスをドキュメントルートで指定すれば解決です。

<?php

include_once "/home/users/2/lolipop.jp-dp********/web/include.inc";

//または

include_once $_SERVER['DOCUMENT_ROOT']."/include.inc";

?>

include,include_once,require,require_onceも同様です。

 

今までは、 ホストディレクトリを指定していたため、今回エラーになりました。

<?php

include_once "http://hoshiya.biz/include.inc";

//または

include_once "http://".$_SERVER['HTTP_HOST']."/include.inc";

?>

 

これに気づくのにしこたま時間がかかりました...。

解決できてよかったです。

 

エラー文のallow_url_include=0が原因だと思って、ひたすらGoogleで検索しましたが、ロリポップにはphp.iniでallow_url_includeに関する設定項目がなく、困っていました。

やれやれ...。

トラックバック(0)

トラックバックURL:


以前に「
Warning: Missing argument 2 for getTitleLink(), called in /home/sites/heteml/users158/m/h/0/mh0723/web/hoshiya.biz/blog/web/php/index.php on line 573 and defined in /home/sites/heteml/users158/m/h/0/mh0723/web/hoshiya.biz/include/function/function.php on line 104
PHPのファンクションでMozshotを楽に使う|星屋工作室 hoshiya.biz 」の一部で タイトルタグ<title></title>の間の文字列を取得するスクリプトを紹介しましたが、もっと短くできました。

 

<?php

function getTitle( $url ) {
	
	$byte = 256;
	
	while(empty($matches)){
		
		//無限ループにならないようにバイト数を制限
	
		if($byte > 10000){ 
	
			break; 
	
		}
		
		//file_get_contents($url)でも読めるが、バイト数指定で読み込む
		$html = file_get_contents($url, NULL, NULL, 0, $byte); 
	
		preg_match("@<title.*?>(.*?)</title>@i" , $html, $matches);
	
		$byte= $byte + 256;
	
	}

	$html = $matches[1];
	
	$html = mb_convert_encoding($html, mb_internal_encoding(), "auto" ); 
	
	return($html);
	
}

echo getTitle("http://hoshiya.biz");

?>

タイトルタグが見つからなかったり、 タイトルタグ<title></title>よりも前に大量の文字列があると読み込みに時間がかかるので、読み込みのバイト数上限を決め、タイトルが見つかるまで徐々に読み込みバイト数を増やしていくようにしました。

↓上記でhttp://hoshiya.bizのタイトルを取得した結果

星屋工作室 hoshiya.biz

 

20011/03/06追記

PHPのクラスライブラリPEARのパッケージ(iHTTP_Client)を使った方法が見つかったのでメモ。

こっちの方が高速!な感じがします...。

※PEARのパッケージHTTP_Clientと依存関係にあるHTTP_Request2が必要です。

<?php

function getTitle($targetUrl){
	
	require_once $_SERVER['DOCUMENT_ROOT']."/lib/PEAR/HTTP_Client/Client.php"; 
	
	$client =& new HTTP_Client();
	$client->get($targetUrl); 
	$response = $client->currentResponse(); 
	
	//余計な改行コードをスペースに変換
	$response = str_replace( array( chr(10), chr(13), chr(9) ), chr(32), $response['body'] ); 
	
	preg_match("/<title.*?>(.*?)<\/title>/", $response, $title_matches); 
	
	$title = $title_matches[1];	
	$title = mb_convert_encoding($title, mb_internal_encoding(), "auto" );  
	
	return($title);
    
}

echo getTitle("http://hoshiya.biz");

?>

 

ついでにJavascriptでタイトルを取得する方法もメモ。

※現在のURLのタイトルしか取得できません。

<script type="text/javascript">
	document.write("このページのタイトルは→「"+document.title+"」です。");
</script>

結果:

関連記事

トラックバック(0)

トラックバックURL:


3文字のドメインが欲しい...。

でも、0~9、a~zと-(ハイフン)の組合せをいろいろ想像してみたけど、

検索してみると取得済み...。

他に思いあらる3文字ってどんだけあるの?

ということで、

  <?php
// 配列作成
$chars = array_merge(range(0,9),range('a','z'),array('-')) ;

$x = 0;

for($i = 0; $i < count($chars); ++$i) {
$a = $chars[$i];

for($j = 0; $j < count($chars); ++$j) {
$b = $chars[$j];

for($k = 0; $k < count($chars); ++$k) {
$c = $chars[$k];

$abc = $abc.$a.$b.$c."<br>";
$x++;

}

}

}

echo count($chars)."種類の文字の組合せは「".$x."」パターンあります。<br>";
echo $abc;

※すべての組合せはサーバーに負荷がかかるので、ここでは英文字を省いて数字とハイフンのみの組合せを表示します。

トラックバック(0)

トラックバックURL:


サンプル見つけたのメモ。

 

 

すばらしい(涙)

ちょっといじくったけど、以下がその結果。

10進数:1234567890

10進数を64進数に変換:19bWBI

64進数を10進数にデコード:1234567890

64進数"Hoshiya"を10進数にデコード:1.22283562167E+12

トラックバック(0)

トラックバックURL:


10進数を36進数に変換する関数

base_convert("変換したい文字列", $from_base, $to_base);

	//(例)base_convert(12345, 10, 36); //10進数の12345を36進数に変換します。
	//(例)base_convert("12345", 36, 10); //36進数の12345を10進数に変換します。

 

ちなみに、進数は何個、数を数えたら次の桁に繰り上がるかの数。

2進数 0,1の2数
10進数 0~9の10数
16進数 0~9、A~Fの16数
36進数 0~9、A~Zの36数

 

変換フォーム

10進数

10進数の「」は、36進数で表すと「0」です。

 

この関数でできない62進数(0~9、A~Z、a~z)やBASE64を応用した64進数にも挑戦したいと思います。

トラックバック(0)

トラックバックURL:


イントラネットで表示されているページを印刷しようとすると、

A4・で印刷したいのに、デフォルトはA4・になっているため、

印刷設定を毎回「」に変更しなくてはならない事にガマンの限界が...。

 

Windowsサーバーなので、

イントラネットはIIS上のASPで作っており

一部PHPを使っています。

 

印刷設定(用紙設定)はASPやJavascriptの関数があるんかな?

といろいろ検索しましたが見つかりませんでした...。

 

しかし、替わりに見つけたのはActtiveXコントロール「ScriptX」を使った方法!

まず以下のページで「Dowload smsx.cab」ボタンを押してダウンロード

任意のディレクトリにアップロード

印刷設定を使うページに以下のコードを挿入し、

<object>タグでActiveXコントロール読み込む。

<!-- ScriptX 読み込み -->
<object id=factory style="display:none"
 classid="clsid:1663ed61-23eb-11d2-b92f-008048fdd814"
 codebase="http://**smsx.cabを設置した場所のパス**/smsx.cab#Version=6,5,439,72(←バージョンによって書き換える)">
</object>
<!-- ScriptX 読み込み -->

次にJavascriptファンクションで印刷設定を行う。

<script type="text/javascript">
	function printWindow() {
		factory.printing.header = "ヘッダ名";
		factory.printing.footer = "フッタ名";
		factory.printing.portrait = false; // 用紙方向 true: 縦 false: 横
		factory.printing.leftMargin = 1.0;
		factory.printing.topMargin = 1.0;
		factory.printing.rightMargin = 1.0;
		factory.printing.bottomMargin = 1.0;
		factory.printing.Print(false); // 印刷実行 ture: 印刷ダイアログなし false: 印刷ダイアログあり
}
</script>

あとはファンクションを呼び出すだけでOK!

 <input type="button" value="ScriptXで印刷" onclick="printWindow();" />
自分の場合は印刷ページ表示と同時に印刷するので、
 <body onload="printWindow();" />

としました。

 

※初回使用時は「ActiveXをインストールしますか?」見たいな警告が出ますが、インストールしてしてください。

 

その他

ヘッダ・フッタに、現在日・ページ数出力

factory.printing.header = "ヘッダ名 &b 日付: &d";   // 現在日出力
factory.printing.footer = "フッタ名 &b &p/&P ページ";     //   ページ数出力

これでイントラネットとインターネットでヘッダー・フッター印刷を切り分けられそうなのがいいです。

ヘッダーとフッターで使える記号

  • &w : 印刷するホームページのタイトル
  • &u : 印刷するページのアドレス
  • &d : 現在の日付(xxxx/xx/xx 形式)
  • &D : 現在の日付(xxxx年xx月xx日 形式)
  • &t : 現在の時刻(コントロールパネルの「地域」で設定されている形式)
  • &T : 現在の時刻(xx:xx:xx 形式)
  • &p : 現在のページ番号
  • &P : 総ページ数
  • &b : 右揃えの文字列(「&b」に続けて文字列を入力)
  • &b&b : 中央揃えの文字列(最初の「&b」に続けて文字列を入力)と右揃えの文字列(2 番目の「&b」に続けて文字列を入力)
  • && : アンパサンド(&)

 

直接印刷(印刷ダイアログ表示なし)だけを直接使う

factory.printing.Print(true);

 

プレビュー画面を表示

factory.printing.Preview();

 

ActiveXコントロールだけにWindowsサーバー上じゃないと動かないとは思うのですが、

WindowsサーバーであればIISじゃなくてもApatchでも動き、

<object>タグで「smsx.cab」さえ読み込めばPHPでも使えるようなことが書かれたページがありました。

 

有償版もあるようですが、用紙サイズの指定とかもできるみたいです。

トラックバック(0)

トラックバックURL:


クリックすれば、件名・本文が入力された状態で

メールソフトの新規メールフォームが表示されて便利なメールリンクですが、

都度リンクを手書きで設定したり、

文字化けしないように件名と本文をURLエンコードしたりすることが面倒なので、

リンク作成用のフォームを作ってみました。

メールリンク作成フォーム
メールアドレス
件名
本文
 
リンク:ここにリンクが表示されます。

エラー処理とか加えていないので、変な動きをするかもしれません...。

トラックバック(0)

トラックバックURL:


何かとサイトサムネイルで重宝するMozshotですが、

サムネイル表示のために、毎回URLの指定やソースの調整をすることがだんだん苦になってきました。

簡単にサイトサムネルを表示するファンクションのサンプルがあったので自分なりに改造し、

指定URLのタイトル取得とMozshotのサムネイルにリンクを組み合わせてみました。

<?php
/*---- 指定したURLのソースを取得 ----*/

function getURL( $pURL ) {
   $_data = null;
   if( $_http = @fopen( $pURL, "r" ) ) {
      while( !feof( $_http ) ) {
         $_data .= fgets( $_http, 1024 );
      }
      fclose( $_http );
   }
   return( $_data );
}


/*---- ソース内にある余計な改行コードを取り除く----*/

function cleanString( $pString ) {
   $_data = str_replace( array( chr(10), chr(13), chr(9) ), chr(32), $pString );
      while( strpos( $_data, str_repeat( chr(32), 2 ), 0 ) != false ) {
         $_data = str_replace( str_repeat( chr(32), 2 ), chr(32), $_data );
      }
      return( trim( $_data ) );
}


/*---- 指定した最初タグ内にある文字列を取得 ----*/

function getElement( $pElement, $pSource ) {

   //取得できなかった場合の代替テキスト
   if(empty($pSource)){
		$pSource = chr(60).$pElement.chr(62)."Pages".chr(60)."/".$pElement.chr(62);
   }

   $_data = null;
   $pElement = strtolower( $pElement );
   $_start = strpos( strtolower( $pSource ), chr(60) . $pElement, 0 );
   $_start = strpos( $pSource, chr(62), $_start ) + 1;
   $_stop = strpos( strtolower( $pSource ), "</" . $pElement .    chr(62), $_start );
   if( $_start > strlen( $pElement ) && $_stop > $_start ) {
      $_data = trim( substr( $pSource, $_start, $_stop - $_start ) );
   }
   return( $_data );
}

	
/*---- Mozshot用ファンクション ---*/
	
function mShot($url,$s){

	if ($url) {
	$sData = getURL( $url );	
	$sData = cleanString( $sData );
	$sData = getElement( "title", $sData );
	mb_language( 'Japanese' );
	$title = mb_convert_encoding($sData, "UTF-8", "auto");
	}
	
	$imgSize[0] = '64';
	$imgSize[1] = '128';
	$imgSize[2] = '256';
	
	$thumbUrl[0] = "/small";
	$thumbUrl[1] = "";
	$thumbUrl[2] = "/large";
	
	$a = "<div id=¥"mShot¥"><a href=¥"".$url."¥" target=¥"_blank¥">¥n";
	$a = $a."<strong class=¥"title¥">".$title."</strong><br />¥n";
	$a = $a."<span class=¥"url¥">".$url."</span><br />¥n" ;
	$a = $a."<img src=¥"http://mozshot.nemui.org/shot".$thumbUrl[$s]."?".$url."¥" width=¥"".$imgSize[$s]."¥" height=¥"".$imgSize[$s]."¥" alt=¥"".$title."¥" />¥n";
	$a = $a."</a></div>¥n" ;
	echo $a;

}
?>

 

上記のfunction.phpをサムネイル表示を使うページindex.phpでインクルードして使う。

<?php include_once $_SERVER['DOCUMENT_ROOT']."/include/function/function.php";?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Mozshotファンクションテスト</title>
<style type="text/css">
<!--
	#mShot {
		padding: 0px;
		margin: 0px;
	}
	#mShot .title {
		font-weight: bold;
	}
	#mShot .url {
		font-size: small;
	}
	#mShot img {
		border: none;
	}
-->
</style>
</head>
<body>
	<?php mShot("http://hoshiya.biz",0);?>
   <?php mShot("http://hoshiya.biz",1);?>
   <?php mShot("http://hoshiya.biz",2);?>
</body>
</html>

このサイト用のCSSを適用しているので、

色は違いますが、実際に表示すると

<?php mShot("http://hoshiya.biz",0);?>の場合

<?php mShot("http://hoshiya.biz",1);?>の場合

<?php mShot("http://hoshiya.biz",2);?>の場合

となります。

 

参考ページ

トラックバック(0)

トラックバックURL:


PHPのライブラリ「PEAR」を使ったら、

Whoisサーバーからドメインの登録情報が取得できるらしい。

 時間があるときにチャレンジしてみる。

トラックバック(0)

トラックバックURL:


レンタルサーバーはロリポップで、

Movable Type 4をMT5にアップグレードした。

ついでに

  • ディレクトリ: ルート → ルート/blog
  • 拡張子: .html → .php

に変更した。

 

しかし、前のブログにアクセスがあるため、以下の選択肢を考えた。

  • 古いブログ(MT4)と新しいブログ(MT5)と共存させる。
  • 古いブログ(MT4)にアクセスがあったら、新しいブログ(MT5)に転送させる。

結果、新しいブログに転送させるほうが効率が良いので、

.htaccessに正規表現で以下の事を加えて実現できた。

URLのRewriteというApatchの機能らしい。

 

http://***.com/2010にアクセスがあったら、

拡張子を.htmlから.phpに変更して、

http://***.com/blog/2010/***.phpにリダイレクトする。

 RewriteEngine On
 RewriteCond %{REQUEST_URI} ^/2010.*$
 RewriteRule ^(.*)\.html$ /$1.php [NC,R]
 RewriteRule ^2010(.*)$ /blog/2010$1 [R,L]


とりあえずできたものの、

正規表現というものを使ったことがなく、

理解するまでには時間がかかりそうです。

 

フォルダごとにこのルールを設定するのは大変なので、

課題として、複数のフォルダに対して一度にルールを適用できるようしたいと思います。

 

参考ページ

トラックバック(0)

トラックバックURL:


APIを使って短縮URLを取得して表示したくて、

PHPで変数に入れたURLを短縮して受け取る方法を探して以下のAPIが候補に上がった。

  • tinyurl.com ... 特に何かの登録がいるわけではない
  • bit.ly(j.mp) ... ユーザー登録をしてAPIキーを取得する必要あり
  • goo.gl ... 調査中

tinyurl.comを利用した例

<?php
$url1 = "http://tinyurl.com/api-create.php?url=";
$url2 = "http://hoshiya.biz"; //短縮したいURLを入れる
$url3 = $url1.$url2;
$url4 = file_get_contents($url3); //短縮されたURLを取得
echo "<a href=\"".$url2."\">".$url2."</a>が<a href=\"".$url4."\">".$url4."</a>に短縮されました。";
?>

 

参考サイト
Twitter 短縮URL TinyURLのAPI
http://memorva.jp/memo/api/twitter_tinyurl.php

 

bit.ly(j.mp)を利用した例

<?php
//短縮URLを取得する
function shorten_url($url){

$bitly_user = '******'; //bit.lyに登録したユーザー名を入れる
$bitly_apikey = 'xxxxxxxxxxxxxxxxxxxxxxxxxx'; //発行されたAPIキーを入れる

//j.mpを使いたい場合はbit.lyと入替える
$bitlyurl = 'http://api.bit.ly/shorten?version=2.0.1&login='.$bitly_user.'&apiKey='.$bitly_apikey.'&longUrl='.$url;
$context = stream_context_create(array('http' =>
array(
'method' => 'GET',
'timeout' => 5
)
));
$ret = file_get_contents($bitlyurl,false,$context);
if($ret !== FALSE){
$json = json_decode($ret, true);
if($json['statusCode'] == 'OK') {
$surl = $json['results'][urldecode($url)]['shortUrl'];
return $surl;
}
}
return FALSE;
}

$url = "http://hoshiya.biz"; //短縮したいURL

echo "<a href=\"".$url."\">".$url."</a>が<a href=\"".shorten_url($url)."\">".shorten_url($url)."</a>に短縮されました。";
?>

 

参考サイト
twitter/URL短縮する(bit.ly)
http://hodade.adam.ne.jp/itmemo/index.php?twitter%2FURL%C3%BB%BD%CC%A4%B9%A4%EB(bit.ly)

トラックバック(0)

トラックバックURL:


PHPで$strに入っているシフトJIS以外の日本語を変換するために

$str = mb_convert_encoding($str, "SJIS", "auto");

echo $str;

と記載してページを表示すると

Warning: mb_convert_encoding() [function.mb-convert-encoding]: Unable to detect character encoding in /home/***/public_html/***.php on line ***

とエラー出て文字化けを起こしました。

phpinfo()で仕様を見てもmbstringの欄はenableと有効になっているが

正常に利用ができませんでした.。

 

しかし、mb_language( 'Japanese' );

を加えたら正常に変換され表示ができました(涙)

mb_language( 'Japanese' );

$str = mb_convert_encoding($str, "SJIS", "auto");

echo $str;

 

次からは必ずmb_language( 'Japanese' );をmb_convert_encodingとセットで使おうと思います。

 

参考ページ

php4.3.11でmb_convert_encoding() - PHP - 教えて!goo
http://oshiete.goo.ne.jp/qa/1678660.html

トラックバック(0)

トラックバックURL:


MagpieRSSをダウンロードして適当なフォルダに保存し、

読み込んだ最新記事一覧を表示するページを作成する。

rss.php

<?php
require_once('magpierss/rss_fetch.inc');
define('MAGPIE_OUTPUT_ENCODING', 'UTF-8');

$count = 5; //最新記事表示件数
$length = 60; //表示する日記記事の最大文字数
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=shift_jis" />
<title>RSS表示スクリプト</title>
</head>
<body>
<?php
$url = 'http://hoshiya.biz/index.xml';
$rss = fetch_rss($url);
echo "<ul>";
array_splice($rss->items, $count);
foreach ($rss->items as $item) {
$href = $item['link'];
$title = mb_convert_encoding($item['title'],"SJIS","auto");
$date = date('Y/m/d H:i:s',parse_w3cdtf($item['dc']['date']));
$description = mb_convert_encoding($item['description'],"SJIS","auto");
if (mb_strlen($description) > $length) {
$description =
mb_strcut($description, 0, $length) . "...";
}
echo "<li>";
echo "<FONT color=\"#ff8040\">(" . $date . ")</FONT> ";
echo "<a href=$href>" . $title . "</a><BR>";
echo $description . "</li>";
}
echo "</ul>";
?>
</body>
</html>

PHP5以上の場合は、

Warning: gmmktime() expects parameter 3 to be long, string given in /home/*******/public_html/magpierss/rss_utils.inc on line **

といったエラーが出ます。

そのときは「rss_utils.inc」の35行目 の

$epoch = gmmktime( $hours, $minutes, $seconds, $month, $day, $year);

 

$epoch = gmmktime( $hours, $minutes, substr($seconds,-2,2), $month, $day, $year);

 

に変更したら正常に表示されました。

参考ページ

http://plaza.rakuten.co.jp/kemusiro/diary/200601150000/

http://d.hatena.ne.jp/ms-k/20051224

トラックバック(0)

トラックバックURL:


モバイルサイトでよく見る数字の絵文字がありますが、

それを表示するためには携帯電話会社各社の絵文字コードを

使用しますが、携帯電話会社によってコードが異なるため、

ユーザーエージェントを判別して各社の絵文字を設定する必要があります。

 

ユーザーエージェントを判別するPHPのスクリプト

<?php
if (eregi("DoCoMo",$_SERVER['HTTP_USER_AGENT'])){
//ドコモ
$num1="&#xE6E2;";
$num2="&#xE6E3;";
$num3="&#xE6E4;";
$num4="&#xE6E5;";
$num5="&#xE6E6;";
$num6="&#xE6E7;";
$num7="&#xE6E8;";
$num8="&#xE6E9;";
$num9="&#xE6EA;";
$num0="&#xE6EB;";
$numsharp="&#xE6E0;";
}
elseif (eregi("^J-PHONE|^Vodafone|^SoftBank|^MOT-",$_SERVER['HTTP_USER_AGENT'])){
//ソフトバンク
$num1="&#xE21C;";
$num2="&#xE21D;";
$num3="&#xE21E;";
$num4="&#xE21F;";
$num5="&#xE220;";
$num6="&#xE221;";
$num7="&#xE222;";
$num8="&#xE223;";
$num9="&#xE224;";
$num0="&#xE225;";
$numsharp="&#xE210;";
}
elseif (eregi("^UP.Browser|^KDDI|^PDXGW",$_SERVER['HTTP_USER_AGENT'])){
//au (<img localsrc="~~"><img localsrc="~~">が公式な方法)
$num1="&#xF6FB;"; //$num1="<img localsrc="180">;
$num2="&#xF6FC;"; //$num2="<img localsrc="181">;
$num3="&#xF740;"; //$num3="<img localsrc="182">;
$num4="&#xF741;"; //$num4="<img localsrc="183">;
$num5="&#xF742;"; //$num5="<img localsrc="184">;
$num6="&#xF743;"; //$num6="<img localsrc="185">;
$num7="&#xF744;"; //$num7="<img localsrc="186">;
$num8="&#xF745;"; //$num8="<img localsrc="187">;
$num9="&#xF746;"; //$num9="<img localsrc="188">;
$num0="&#xF7C9;"; //$num0="<img localsrc="325">;
$numsharp="&#xF489;"; //$numsharp="<img localsrc="818">;
}
elseif (eregi("DDIPOCKET|WILLCOM",$_SERVER['HTTP_USER_AGENT'])){
//ウィルコム
$num1="&#61631;";
$num2="&#61632;";
$num3="&#61633;";
$num4="&#61634;";
$num5="&#61635;";
$num6="&#61636;";
$num7="&#61637;";
$num8="&#61638;";
$num9="&#61639;";
$num0="&#61630;";
$numsharp="[#]";
}
elseif (eregi("^emobile",$_SERVER['HTTP_USER_AGENT'])){
//イー・モバイル(ドコモと同じ)
$num1="&#xE6E2;";
$num2="&#xE6E3;";
$num3="&#xE6E4;";
$num4="&#xE6E5;";
$num5="&#xE6E6;";
$num6="&#xE6E7;";
$num7="&#xE6E8;";
$num8="&#xE6E9;";
$num9="&#xE6EA;";
$num0="&#xE6EB;";
$numsharp="&#xE6E0;";
}
else {
//PC
$num1="[1]";
$num2="[2]";
$num3="[3]";
$num4="[4]";
$num5="[5]";
$num6="[6]";
$num7="[7]";
$num8="[8]";
$num9="[9]";
$num0="[0]";
$numsharp="[#]";
}
?>

絵文字を表示する場所に以下を記載(例:数字の0の絵文字)

<?php print $num0; ?><a href="http://www.hoshiya.biz/" accesskey="0">トップページへ</a>

 

参考サイト

携帯サイトのaccesskeyの数字画像を表示させるには
http://hoge.secret.jp/blog/2008/05/29/%E6%90%BA%E5%B8%AF%E3%82%B5%E3%82%A4%E3%83%88%E3%81%AEaccesskey%E3%81%AE%E6%95%B0%E5%AD%97%E7%94%BB%E5%83%8F%E3%82%92%E8%A1%A8%E7%A4%BA%E3%81%95%E3%81%9B%E3%82%8B%E3%81%AB%E3%81%AF/

携帯の文字コードと絵文字の基礎知識|Mobile/Encoding - CodeRepos::Share - Trac
http://coderepos.org/share/wiki/Mobile/Encoding

トラックバック(0)

トラックバックURL:


PHPで荷物追跡サービスの検索フォームを作ってみる。

宅急便会社の荷物追跡サービスを利用するために、

各会社のホームページを開いてから検索するのは面倒くさいので、

イントラネット等利用するため、

運送会社の選択と、伝票番号の入力で、

各会社の検索結果ページが表示されるようにフォームを作ってみた。

 

とりあえず、

ヤマト運輸、佐川急便、日本郵便(ゆうパック・エクスパック)

の検索をしてみる。

 

動作としては、

テキストエリアに伝票番号を入力し、

会社を選択して「検索」を押すと、

各会社の検索結果ページが表示が新規画面で表示されるという物です。

 

PHPのページ単体で検索ページを表示する場合

nimotsu.php

(テストページはこちら→http://hoshiya.biz/nimotsu_search/nimotsu.php

<?php
//エラー処理
$kaisha = (!isset($_POST['kaisha'])) ? null : $kaisha = $_POST['kaisha'];
$denpyou = (!isset($_POST['denpyou'])) ? null : $denpyou = $_POST['denpyou'];
$submit = (!isset($_POST['submit'])) ? null : $submit = $_POST['submit'];
//URL設定
//クロネコヤマト
$url['1'] = "http://jizen.kuronekoyamato.co.jp/jizen/servlet/crjz.b.NQ0010?id=".$denpyou;
//佐川急便
$url['2'] = "http://k2k.sagawa-exp.co.jp/p/web/okurijosearch.do?okurijoNo=".$denpyou;
//日本郵便 ゆうパック・EXPACK・ポスパケット
$url['3'] = "http://tracking.post.japanpost.jp/service/singleSearch.do?org.apache.struts.taglib.html.TOKEN=&searchKind=S002&locale=ja&SVID=&reqCodeNo1=".$denpyou;
//伝票番号が入力されていれば検索ページを表示
if (isset($denpyou)){
header("Location: ".$url["$kaisha"]);
}
else {
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>荷物追跡</title>
</head>
<body>
<form id="form1" name="form1" method="post" action="">
<br />
<input name="denpyou" type="text" id="denpyou" value="" />
<br />
<label for="kaisha">会社選択</label>
<br />
<input name="kaisha" type="radio" id="kaisha" value="1" checked />
ヤマト運輸<br />
<input name="kaisha" type="radio" id="kaisha" value="2" />
佐川急便<br />
<input name="kaisha" type="radio" id="kaisha" value="3" />
ゆうパック・EXPACK<br />
<input name="submit" type="submit" id="submit" value="検索" />
</form>
</body>
</html>
<?php
}
?>

 

HTMLフォームとPHPの検索ページ表示の2ファイルを使う場合

form.html

(テストページはこちら→http://hoshiya.biz/nimotsu_search/form.html

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>荷物追跡サービス検索</title>
</head>
<body>
<form id="form1" name="form1" method="post" action="search.php" target="_blank">
<label for="denpyou">伝票番号</label>
<br />
<input name="denpyou" type="text" id="denpyou" />
<br />
<label for="kaisha">会社選択</label>
<br />
<input name="kaisha" type="radio" id="kaisha" value="1" checked />
ヤマト運輸<br />
<input name="kaisha" type="radio" id="kaisha" value="2" />
佐川急便<br />
<input name="kaisha" type="radio" id="kaisha" value="3" />
ゆうパック・EXPACK<br />
<input name="submit" type="submit" id="submit" value="検索" />
</form>
</body>
</html>

 

search.php

<?php
//エラー処理
$kaisha = (!isset($_POST['kaisha'])) ? null : $kaisha = $_POST['kaisha'];
$denpyou = (!isset($_POST['denpyou'])) ? null : $denpyou = $_POST['denpyou'];
$submit = (!isset($_POST['submit'])) ? null : $submit = $_POST['submit'];
//URL設定
$url['1'] = "http://jizen.kuronekoyamato.co.jp/jizen/servlet/crjz.b.NQ0010?id=".$denpyou;
$url['2'] = "http://k2k.sagawa-exp.co.jp/p/web/okurijosearch.do?okurijoNo=".$denpyou;
$url['3'] = "http://tracking.post.japanpost.jp/service/singleSearch.do?org.apache.struts.taglib.html.TOKEN=&searchKind=S002&locale=ja&SVID=&reqCodeNo1=".$denpyou;

if (empty($denpyou)){
echo "Error! is empty denpyou number";
}
else {
header("Location: ".$url["$kaisha"]);
}
?>

 

ちなみにテスト





ヤマト運輸
佐川急便
ゆうパック・EXPACK

 

改造の余地はあるもののとりあえずは使える。

 

 

↓Javascript版は以下をご参照ください。

トラックバック(0)

トラックバックURL:


とりあえず時間がないので忘れないようにメモ。

以下のサイトを参照

 

PHPでYahoo!API - phpspot
http://phpspot.net/php/pgphp_Yahoo_API.html
PHPでYahoo!API - phpspot

 

これを利用していじくっている最中のページ

http://hoshiya.biz/yapi/web.php

 

上記を元にYahoo!検索で出力される被リンクの結果をXMLで受け取り、

自分のサイトに表示するスクリプトに挑戦。

ちなみにhttp://hoshiya.bizの被リンクをリクエスト

 

インデックス検索結果 - サイトエクスプローラー - Yahoo!検索
http://siteexplorer.search.yahoo.co.jp/advsearch?p=http://hoshiya.biz&st=inlinks

 

上記の結果をXMLで読み込みたいわけなんですが、

どこでXMLを吐き出しているのかを検索中。

 

そんなこんなで見つけた「バックリンクチェッカー

PHPのスクリプトを配布してあったので、設置してみた。

http://hoshiya.biz/blink.php

トラックバック(0)

トラックバックURL:


ページにアクセスするごとに、

ランダムに選択されたアフィリエイトのバナーを表示するスクリプト。

 

「banner.php」を以下の内容でルートに作成。

(例:http://www.example.com/banner.php)

<?php

$bnSrc[0]='<a href="http://www.example.com/" target="_blank"><img src="http://www.example.com/banner1.jpg" alt="バナー1" border="0" /></a>';

$bnSrc[1]='<a href="http://www.example.com/" target="_blank"><img src="http://www.example.com/banner2.jpg" alt="バナー2" border="0" /></a>';

$bnSrc[2]='上記同様にバナーのタグを入れる';

$n = mt_rand(0,count($bnSrc)-1);

$bn = $bnSrc[$n];

echo $bn;

?>

 

PHPファイルのバナーを表示したい箇所に以下のコードを記述。

(例えば、http://www.example.com/index.phpの場合)

<?php
$openfile = file_get_contents('http://www.example.com/banner.php');//
echo $openfile;//
?>

 

こでだけでOK。

 

 

Javascriptで同じことをする方法は以下を参照

http://hoshiya.biz/2009/05/javascript.html

トラックバック(1)

トラックバックURL:

ページにアクセスするごとに、 ランダムに選択されたアフィリエイトのバナーを表示す... 続きを読む