Nucleusの自動保存機能EUC-JPじゃ使えんのね
■冨樫義弘『HUNTER×HUNTER』 1年8ヶ月ぶりに連載再開
■グーグルとヤフーを、じっくり比較 ~違いから逆に見えてくる“SEOの一般法則”
適等にNucleus関数使ったら302返してることに気がつかず10日ほど放置して泣きそうになった俺
header(‘HTTP/1.0 301 Moved Permanently’);
header(‘Location http://***’);
exit;
■PHP 5.2.4 Released
■バナーは目に入らないのか?~新旧の知見
■ニコニコ動画はYouTubeを超える
いろいろ超えてるとは思いますが、それは島国の中の話
■人月計算とExcelとスーツの世界より
■「僕が人の話を聞く時に、絶対にやらないようにしていることが一つあります」
低画質版だからか音割れがひどかったので、ついカッとなってプレミアム課金。
23485529 sm881011_lowquality.flv
39720930 sm881011_premium.flv
プレミアムは、再エンコ制限ギリギリの40M弱の通常版ファイル。
Input #0, flv, from 'sm881011_premium.flv':
Duration: 00:10:22.1, start: 0.000000, bitrate: 224 kb/s
Stream #0.0: Video: vp6f, yuv420p, 512x384, 29.92 fps(r)
Stream #0.1: Audio: mp3, 44100 Hz, stereo, 224 kb/s
元のビットレートは224kbpsらしい。
Input #0, flv, from 'sm881011_lowquality.flv':
Duration: 00:10:22.1, start: 0.000000, bitrate: 64 kb/s
Stream #0.0: Video: vp6f, yuv420p, 320x240, 29.92 fps(r)
Stream #0.1: Audio: mp3, 44100 Hz, stereo, 64 kb/s
低画質版は64kbpsかぁ。
動画楽しむなら別に音なんてどうでもいいけどさ。
最近は再エンコで音ずれの問題とかでてきてるけど。
QVGAリサイズに絶望した。
ここ数日ニコニコデイリーランキングを取得してみた。
6時にデータリセットとあったが、1時間ごとにデータを集計してランキングへ反映しているため、表示としては7時でリセットされる形でした。
6時台にデータを取得すればデイリーランキングを取得できる。
ランキングページは素敵にHTMLなので、パースが面倒。
tidyでHTMLをXHTMLに変換し、simplexmlでパースする方針で。
PHP: Tidy 関数 – Manualを確認するとコンパイルオプションひとつでいけそうなんだけど、やってみたらエラー。
checking for TIDY support... yes
configure: error: Cannot find libtidy
泣きそうになりながらもう一回コンパイルしたら通るし謎。
数日後には5.2.4をコンパイルしなきゃいけないせつなさ。
<?php
$config = array(
'output-xhtml' => true,
);
if (!$tidy = @tidy_parse_file('/path/to/file', $config, 'utf8')) {
echo 'tidy parse error';
exit;
}
$tidy->cleanRepair();
$xhtml = str_replace(' ', '', (string)$tidy);
unset($tidy);
if (!$simplexml = @simplexml_load_string($xhtml)) {
echo 'xml parse error';
exit;
}
$ranking = $simplexml->body[0]->table[0];
foreach ($ranking[0]->tr as $tr) {
if ($tr->td->attributes() == 4) {
continue;
}
print(preg_replace('/[^\d]/u', '', $tr->td[0]->p[0])); // ranking
print(preg_replace('/[^\d]/mu', '', $tr->td[0]->p[1])); // playing
print($tr->td[1]->p[1]->a->attributes()); // url
print(str_replace("\n", ' ', $tr->td[2]->div->h3->a)); // title
//exit;
}
xpath使わずやってみたけど何がなんだか。
対象ページのフォーマット変わったら、ユーザー定義のエラーハンドラーでとれないUndefined functionでE_USER、syntax errorでE_PARSEがでて死亡。
それに対するエラー処理を@エラー抑制子がんばること考えるとxpathの方使ったほうが良いなと思った。
なんか空メール処理が流行りらしいので。
空メール送信
mail@example.jp
空メール返信
info@example.jp
空メール処理スクリプト。
PEAR::Mail_mineDecode使えるなら使うべきです。
PEARを無駄に嫌う人がいますが世界中の人にデバッグしているわけですので、俺俺処理よりもよっぽど信頼できます。
<?php
mb_language('ja');
mb_internal_encoding('SjIS-win');
if (!$input = file_get_contents('php://stdin')) {
print 'input error';
exit;
}
if (!preg_match("/^(.*?)\r?\n\r?\n(.*)/s", $input, $input_matches)) {
print 'mail parse error';
exit;
}
if (!preg_match("/(?:^|\r?\n)from:\s(.+)(?:\r?\n|$)/is", $input_matches[1], $header_matches)) {
print 'header parse error';
exit;
}
$to = $header_matches[1];
if (preg_match('/<(.+)>/', $to, $to_matches)) {
$to = $to_matches[1];
}
$subject = 'タイトル';
$body = '本文';
$from = 'info@example.jp';
$headers = "From: {$from}\r\n"
. "Reply-To: {$from}\r\n"
. "Return-Path: {$from}";
if ($to == $from) {
exit;
}
$subject = mb_encode_mimeheader($subject);
mb_send_mail($to, $subject, $body, $headers);
MTA毎の空メール設定。
予備としてadmin@example.jpへ転送しておきます。
○qmail
/var/qmail/alias
/path/to/.qmail-mail(VirtualHost利用時)
"|/usr/bin/php /path/to/cli/tempmail.php >> /var/log/tempmail/example_jp.log"
&admin@example.jp
○Postfix
/etc/postfix/aliases
mail: admin,"|/usr/bin/php /path/to/cli/tempmail.php >> /var/log/tempmail/example_jp.log"
<?php
/**
* @see http://blog.livedoor.jp/dankogai/archives/50900305.html
*/
require_once 'HTTP/Client.php';
$conf = array('mail' => 'your@mail.addr', 'password' => 'password');
preg_match('/(sm\d+)$/', @$argv[1], $matches) or die(@$argv[0] . ' [video_id|uri]');
$video_id = $matches[1];
$client = new HTTP_Client();
$client->setDefaultHeader('Keep-Alive', 4);
echo "login as {$conf[mail]}\n";
$client->post('https://secure.nicovideo.jp/secure/login?site=niconico', $conf);
$client->get("http://www.nicovideo.jp/watch/{$video_id}");
$client->get("http://www.nicovideo.jp/api/getflv?v={$video_id}");
$res = $client->currentResponse();
parse_str($res['body'], $q);
$url = @$q['url'] or die('Failed: ' . $res['body']);
echo "{$url} => {$video_id}.flv\n";
$client->get($url);
$res = $client->currentResponse();
file_put_contents("/path/to/{$video_id}.flv", $res['body']);
$ php nicovideo.php sm279015
PHPチックではないですが、元へのリスペクトということで。
YAMLクラスライブラリはコチラにあります。
extentionはコチラ。
PEAR、PECLにないので今回は使いませんでした。