*画像:http://www.microsoft.com/taiwan/silverlight/
まだまだサーバ側で各スレッドの画像URLを抜き出すところまでしかつくっていませんが、Silverlightが始まりすぎてる(台湾のだけど)ので、Silverlightで2chブラウザを作ってみようということで製作中。
行き当たりばったりで作っているので、変数の量がハンパなく多くなったり、変数の英語を間違えたりしてますが、もっといい方法があれば教えていただきたいのでちょっと公開。
function cnvString($cnvstr){
foreach($cnvstr as $key => $num){
$cnvdstr[“$key”] = mb_convert_encoding($cnvstr[“$key”], “UTF-8”, “SJIS”);
}
return($cnvdstr);
}
2chから取得出来るdatファイルがS-JISエンコードなので、MySQL用にUTF-8に変換。
function splitString($cnvstr){
foreach($cnvstr as $key => $res){
$pattern = ‘/h?ttps?:\/\/[0-9a-z_,.:;&=+*%$#!?@()~\’\/-]+/i’;
$cnvdstr[“$key”] = mb_split(“<>”,$res);
$urlpush= explode(“\n”, $cnvdstr[“$key”][3]);
foreach($urlpush as $urlpusharray){
preg_match_all($pattern, $urlpusharray, $urlsplitarray);
}
$cnvdstr[“$key”][5] = $urlsplitarray[0];
}
return($cnvdstr);
}
次に変換したdatをfileで1行ずつ配列に収納し、foreachで1個ずつ処理していきます。
この1行を<>で切り離し、本文である$cnvdstr[“$key”][3]を改行コード「¥n」でまた配列に入れ直し、1行ずつURLが存在するかを検索し、URLがあった場合配列[5]に収納しなおす形式をとっています。
$pattern内で使われている検索文字のオプションでiでなくgを使えば複数行できると書いてあったんですが、gにするとエラーを吐くので行ごとに処理をするようにしています。
ここまでの処理+MySQLに収納、MySQLから取り出して表示まではいいんですが、この後にwgetで画像を取得するようにしたいんですが、
function wgetImg($tmpdirpath,$escstr,$imgurltxt,$srcdirpath,$workdirpath){
$subject = file($tmpdirpath.$escstr.$imgurltxt);
$gotimgurl = $subject;
foreach($subject as $key => $res){
exec(“wget -a “.$workdirpath.$escstr.$tmpdirpath.$escstr.”url.log -nc -S -t 1 -w 2 –user-agent=’Monazilla/1.00′ “.$res.” -P “.$workdirpath.$escstr.$srcdirpath);
}
}
このようにwgetを実行すると-Pで指定したディレクトリに画像が入ってくれず、実行PHPと同じディレクトリにダウンロードされる・・・。
こんな感じのブラウザを作りたいんですが、そろそろ折れそう。