ZendFramework SQL Debug View Helper

cakeとかsymfonyには画面下にSQLログみたいなのが表示されてる。これzfにも欲しい。

と思ってポイものを作った。

svn co http://svn.coderepos.org/share/lang/php/ZendFramework_ext/library/Ex/View/Helper/ShowSQL.php

使い方。

bootstrapで、view helperのディレクトリを指定する。

 
$view = new Zend_View();
$view->addHelperPath(self::$root . '/library/Ex/View/Helper', 'Ex_View_Helper');
 

で、viewの中で

 
< ?php echo $this->showSQL() ?>
 

ってやると、

こんなやつが表示される。

helper内の

 
$this->_db = Zend_Db_Table::getDefaultAdapter();
 

DBに接続する部分は環境にあわせて書き換えてください。
このプラグイン内でjQueryを読み込んでて、それが影響するようならJSの部分だけ消しちゃってください。
テーブルのソートができなくなるぐらいで特に問題はないです。

plugin内で完結させようとしてHTMとかCSSがごちゃまぜになってしまった。

ZendFrameworkでニコりまくる。mylist編

前回 ZendFrameworkでニコる。flv。

mylist の動画を全部落とす。

連続でアクセスしまくるとしばらく(15分ぐらい?)弾かれるみたいなので、1つのflvダウンロードするごとに sleep(30) で30秒待機してます。

 
< ?php
require_once 'Zend/Loader.php';
Zend_Loader::registerAutoload();
 
// create adapter
$client = new Zend_Http_Client();
$client->setConfig(array('keepalive' => true));
 
// Login
$client->setCookieJar()
       ->setUri('https://secure.nicovideo.jp/secure/login?site=niconico')
       ->setParameterPost(array(
            'mail'     => 'mailaddress',
            'password' => 'password',
         ))
       ->request(Zend_Http_Client::POST);
 
// get mylist html
$list = 'http://www.nicovideo.jp/mylist/7446991';
$client->setUri($list)
       ->request(Zend_Http_Client::GET);
$response = $client->getLastResponse();
 
$html = $response->getBody();
 
// get smile video list
$dom = new Zend_Dom_Query($html);
$xpath = "//html/body/div[@id='PAGEBODY']/div[2]/table[@id='mylists']/tr/td[2]/h3/a";
$results = $dom->queryXpath($xpath);
 
// get href
$urlList = array();
foreach ($results as $r) {
    $urlList[] = $r->getAttribute('href');
}
 
// get flv
foreach ($urlList as $url) {
    $video = preg_split('/\//', $url);
    $video_id = $video[1];
 
    $client->setUri("http://www.nicovideo.jp/watch/{$video_id}")
           ->request(Zend_Http_Client::GET);
 
    // for filename
    $title = $client->getLastResponse();
 
    $client->setUri("http://www.nicovideo.jp/api/getflv?v={$video_id}")
           ->request(Zend_Http_Client::GET);
 
    $response = $client->getLastResponse();
 
    // get flv url
    $body = $response->getBody();
    parse_str($body, $query);
    $url = $query['url'];
 
    /**
     * get Title
     */
    $dom = new Zend_Dom_Query($title->getBody());
    $results = $dom->queryXpath('//title');
    foreach ($results as $r) {
        $pageTitle = $r->nodeValue;
    }
 
    /**
     * get flv
     */
    $client->setUri($url)
           ->request(Zend_Http_Client::GET);
    $response = $client->getLastResponse();
    file_put_contents("{$pageTitle}.flv", $response->getBody());
 
    sleep(30);
 
}
 

なんかたまに文字化けする。なんだかよくわからん。

ZendFrameworkでニコる。flv。

今さら。

flv取りたかった。

色々ハマった。(array)Object とか null とかに。

まぁいいや。

 
< ?php
require 'Zend/Loader.php';
Zend_Loader::registerAutoload();
 
$video_id = 'sm3997296';
 
// Create Adapter
$client = new Zend_Http_Client();
$client->setConfig(array('keepalive' => true));
 
// Login
$client->setCookieJar()
       ->setUri('https://secure.nicovideo.jp/secure/login?site=niconico')
       ->setParameterPost(array(
            'mail'     => 'mailaddress',
            'password' => 'password',
         ))
       ->request(Zend_Http_Client::POST);
 
$client->setUri("http://www.nicovideo.jp/watch/{$video_id}")
       ->request(Zend_Http_Client::GET);
 
// for filename
$title = $client->getLastResponse();
 
$client->setUri("http://www.nicovideo.jp/api/getflv?v={$video_id}")
       ->request(Zend_Http_Client::GET);
 
$response = $client->getLastResponse();
 
// get flv url
$body = $response->getBody();
parse_str($body, $query);
$url = $query['url'];
 
/**
 * get Title
 */
$dom = new Zend_Dom_Query($title->getBody());
$results = $dom->queryXpath('//title');
foreach ($results as $r) {
    $pageTitle = $r->nodeValue;
}
 
/**
 * get flv
 */
$client->setUri($url)
       ->request(Zend_Http_Client::GET);
$response = $client->getLastResponse();
file_put_contents("{$pageTitle}.flv", $response->getBody());
 

Zend_DomでHTMLのtitleタグ取得して、「title.flv」って名前で保存してます。ディレクトリに権限与えてください。

ほとんど http://puchiko.lowtech.ne.jp/?itemid=1071&catid=26 ここのまんまだけど。
PEAR::HTTP使ったことなくてちょっと時間かかった。Zend_Domも始めよくわからんかった。

たのし。

Zend_Textで日本語うまくいかない(´;ω;`)ブワ

だめだあああああああ。

疲れた。文字のバイトコードとか普段使わないからどうすりゃいいのかわからんw
3時間ぐらい粘ったけどむりだw

拡張子 flf の日本語フォントを
http://www.figlet.org/ ここから落としてきて(International fonts の中にある cjkfonts -> jiskan16 ってやつ)、使ってみたけどこれの中身が文字コード値がISO-2022-JPになってる。

でも、Zend_Textの中ではUTF-8で処理してるから例えば「字」って文字を figlet で表示したいときに欲しい ISO-2022-JP のバイトコードは 0x3b71 なのに UTF-8では「字」のコードは 23383(0x5b57) なので、このコードに対応するISO-2022-JPの文字は「柧」って文字になっちゃう><。

unpack() とか ord() とか bin2hex() とか使ってみたけどわかない(´;ω;`)ブワ

ヘルプ!

そもそもなんで

 
    public function render($text, $encoding = 'UTF-8')
    {
        if (is_string($text) === false) {
            throw new InvalidArgumentException('$text must be a string');
        }
 
        if ($encoding !== 'UTF-8') {
            $text = iconv($encoding, 'UTF-8', $text);
        }
 

$encoding って変数があるのに UTF-8 以外だったら UTF-8に変換してんだよ。

Zend_Textがすごい件w

たぶん次のバージョン 1.6 に入るんだと思いますが、なんかすごいのが入ってるw

とりあえずコード。

 
require_once 'Zend/Text/Figlet.php';
$f = new Zend_Text_Figlet();
 
echo $f->render('Oppai!');
 

って書くと、

ってできる。

これはすごい!
なにがすごいかって、なんで採用したんだこれw

 
$f->setSmushMode(true);
$f->setRightToLeft(true);
$f->setJustification(true);
 

ってやると

ってできるんだよ!

これは使えn(ry