もしもAPIをphpで使ってみる -5ページ目

メール投稿もできる

ランキングの次に何をしようかと考えているうちにかなり間があいてしまったので、ちょっとつなぎで、ランキングをHTMLで表示するのではなく、ブログに投稿してしまうのを紹介します。
いつもより、さらに手抜きです。

ロリポップ!レンタルサーバーでも、cronが使えるようになったので思いつきましたが、cronで1週間に1回動かせば、毎週のランキングをブログに投稿できます。

前回のindex.phpの最後の「print <<< EOS」以降を代えます。
(1)メールをHTML形式で送る場合

$to = "xxxxxx@blogger.com";
$from = "denjinm@prositk.com";
$title = "ランキング " .date("Y/n/j");
$exheader = "From:$from\nContent-Type: text/html; charset=ISO-2022-JP";
mb_send_mail($to, $title, $contents, $exheader);
?>


(2)TEXT形式で送る場合

$to = "xxxxxx@@blog.sakura.ne.jp";
$from = "denjinm@prositk.com";
$title = "ランキング " .date("Y/n/j");
$exheader = "From:$from";
mb_send_mail($to, $title, $contents, $exheader);
?>


次は、なにをやりましょうか。

ペタしてね

一気に最後まで

また、間があいてすみません。
でも、もうほとんど完成なので、一気にいきます。

前回ので、自サイトで扱っている商品は、$contentsに入っていきましたが、
自分のサイトにない商品も、ランキングの数を補うために後ろに追加します。

この場合は、リンク先は、もしもの販売ページになります。
自サイトの時と同じように、{item_ranking}以外を、置き換えて、$othersという配列に一時保管しておきます。

$max_rankまで足りない分を$othersから取り出して、順位をいれて、$contentsに追加してランキングの完成です。

print <<< EOS より後ろの部分がランキングを表示するhtmlです。今回は、思いっきり他の部分を省いていますが、まわりをそれなりにかざれば、立派なランキングになります。

index.phpは、以下のようになりました。

<?php
mb_regex_encoding("UTF-8");
mb_internal_encoding("UTF-8");

require_once('config.php');
require_once('urllist.php');
require_once('getmoshiapi.php');

$p = 0;
$maxnum = 100;
$s = "sales";
$others = array();

if(($ArticleSearch = getmoshi_tag($authorization_code, $tag, $p, $maxnum, $s)) !== FALSE){
$ranking = 1;
$contents = "";
foreach ($ArticleSearch->Articles->Article as $Article) {
$pid = (int)$Article->ArticleId;
if(isset($arr_pageurl[$pid])){
$file = file_get_contents("entry.html");
$file = str_replace("{item_link}",$arr_pageurl[$pid] ,$file);
$file = str_replace("{item_ranking}",$ranking,$file);
$file = str_replace("{item_name}",$Article->Name,$file);
$image = "http://image.moshimo.com/item_image/$Article->ImageCode/1/r.jpg";
$file=str_replace("{item_image}",$image ,$file);
$ShopPrice = isset($Article->ShopPrice) ? $Article->ShopPrice : $Article->RecommendedPrice;
$price = number_format((float)$ShopPrice);
$file=str_replace("{item_price}",$price,$file);
$contents .= $file;
$ranking++;
if($ranking > $max_rank){ break;}
} else {
$file = file_get_contents("entry.html");
$file = str_replace("{item_link}","http://www.moshimo.com/article/${shop_id}/$Article->ArticleId/" ,$file);
$file = str_replace("{item_name}",$Article->Name,$file);
$image = "http://image.moshimo.com/item_image/$Article->ImageCode/1/r.jpg";
$file=str_replace("{item_image}",$image ,$file);
$ShopPrice = isset($Article->ShopPrice) ? $Article->ShopPrice : $Article->RecommendedPrice;
$price = number_format((float)$ShopPrice);
$file=str_replace("{item_price}",$price,$file);
$others[] = $file;
}
}

for( ;$ranking <= $max_rank; $ranking++){
$file = array_shift($others);
$file = str_replace("{item_ranking}",$ranking,$file);
$contents .= $file;
}
} else {
$contents = "準備中";
}

print <<< EOS
<html>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<body>
<table>
$contents
</table>
</body>
</html>
EOS;
?>


ペタしてね

UTF-8ファイルの編集について

今回は、ちょっと中断で、注意事項です。

もしもAPIは、UTF-8でやりとりを行う必要があるので、PHPのソースもUTF-8で作成するようにしてます。
ここに公開しているものも、ほぼUTF-8でというものです。

ここで問題があります。UTF-8といっても、ファイルの先頭にUTF-8を示すコードBOM(Byte Order Mark)を入れるBOM付きと、それをつけないBOM無しがあります。(本来BOMは、バイト単位の並び順を示すもので、16ビットや32ビットのUTFで意味があるもので、UTF-8では、UTF-8であることを示す以外の意味はない)

phpの処理は、<?php以降なので、頭についているBOMは、基本邪魔な存在です。変なことを起こす可能性があるので、BOM無しを使ってください。

具体的に言うと

×
Windowsのメモ帳のUTF-8は、BOM付きです。


TeraPadでは、BOM付きをUTF-8、BOM無しをUTF-8Nと区別しています。
CrescentEve、秀丸、Dreamweaverは、BOMなしのようです。