人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

PHP5.5.10で、以下のサイトを参考にGoutteを試そうとしますがエラーが取れず困っています。
http://d.hatena.ne.jp/hnw/20120115
http://www.buildinsider.net/web/bookphplib100/088

ルートディレクトリにファイルは2つしか入っていません
index.php
goutte.phar

index.phpの中身
>|
<?php
require __DIR__.'/goutte.phar';
use Goutte\Client;

$client = new Client();
$crawler = $client->request('GET', 'http://d.hatena.ne.jp/keyword/%BA%B0%CC%EE%A4%A2%A4%B5%C8%FE');
list(list($title, $url)) = $crawler->filter('div.keyword-container a.title')->extract(array('_text', 'href'));
$furigana = $crawler->filter('div.keyword-container span.furigana')->text();

var_dump($title, $url, $furigana);
?>
|<


以下、質問の続きは文字数の関係で補足に記載します。
よろしくお願いします。

●質問者: wsapp
●カテゴリ:ウェブ制作
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

質問者から

最初、PHP5.3以降を用意するように書かれていたのでPHP5.3.3で試したら

Parse error: syntax error, unexpected '[' in phar:///home/hoge/xxx.net/public_html/goutte.phar/vendor/guzzlehttp/guzzle/src/functions.php on line 20

のエラーが取れませんでした。

で、PHP5.5.10で試すと
Warning: curl_setopt_array(): Array keys must be CURLOPT constants or equivalent integer values in phar:///home/hoge/xxx.net/public_html/goutte.phar/vendor/guzzlehttp/guzzle/src/Adapter/Curl/CurlFactory.php on line 48
Fatal error: Uncaught exception 'InvalidArgumentException' with message 'The current node list is empty.' in phar:///home/hoge/xxx.net/public_html/goutte.phar/vendor/symfony/dom-crawler/Symfony/Component/DomCrawler/Crawler.php:526 Stack trace: #0 /home/hoge/xxx.net/public_html/index.php(9): Symfony\Component\DomCrawler\Crawler->text() #1 {main} thrown in phar:///home/hoge/xxx.net/public_html/goutte.phar/vendor/symfony/dom-crawler/Symfony/Component/DomCrawler/Crawler.php on line 526


これらはgoutte.phar内部のエラーなんですよね??
にっちもさっちもいかず困っています。
サーバーはレンタルでエックスサーバーです。
よろしくお願いしますm(_ _)m


1 ● かずきち。
●50ポイント

なんかの変数が空みたいですよ?
このプログラムの途中で変数を変数に格納されようとしていますが、
格納前にprint文をはさんでみてください。
おそらく何かがnullを返してエラーします。


wsappさんのコメント
こんにちは。 ご回答ありがとうございます。 すでに $crawler = $client->request・・・ の段階でエラーが出ます。 goutte.pharの中をどうすれば見れるのかわからないでいます。 困ったもんです。 解決できないようだと、別なモジュールsimple_html_domでは動作確認していますのでこちらを代用に考えています。 しかし、みなさんあっさり動いているようなので、なんかしっくりきません。 もう少し意見を待ってみます。

かずきち。さんのコメント
$crawler = $client->request('GET', 'http://d.hatena.ne.jp/keyword/%BA%B0%CC%EE%A4%A2%A4%B5%C8%FE'); ここの一文でどうやら正しくGETできていないようです。 僕はあんまりphp使わないんですけど… GET→_GETって違いますかね?w エラー行分かりますか?

wsappさんのコメント
返信ありがとうございます。 モジュール配布先のサンプルコードもGETなので間違いないと思います。 https://github.com/fabpot/goutte エラー行とはgoutte.pharのですか? この中身は見る方法が解りません。 それとも、自分のindex.phpでしたら $crawler = $client->request('GET', 'http://d.hatena.ne.jp/keyword/%BA%B0%CC%EE%A4%A2%A4%B5%C8%FE'); をコメントアウトするとエラーは消えます。

2 ● sasada
●50ポイント ベストアンサー

コメント欄にある、キーワード「紺野あさ美’」は作成されてないので取得出来ないと思います。
取得するURLは、質問文にあるURL「http://d.hatena.ne.jp/keyword/%BA%B0%CC%EE%A4%A2%A4%B5%C8%FE」なら通ります。
その上で、

list(list($title, $url)) = $crawler->filter('div.keyword-container a.title')->extract(array('_text', 'href'));

list(list($title, $url)) = $crawler->filter('section.keyword-container a.title')->extract(array('_text', 'href'));

に書き換えないと上手くいかないようです。(HTMLソースを見た限り)


wsappさんのコメント
お答えいただいているのに先ほど気づきましたm(_ _)m 返信が遅くなり失礼しました。 >| <?php require __DIR__.'/goutte.phar'; use Goutte\Client; header('Content-Type: text/html; charset=utf-8'); $client = new Client(); $crawler = $client->request('GET', 'http://d.hatena.ne.jp/keyword/%BA%B0%CC%EE%A4%A2%A4%B5%C8%FE’); list(list($title, $url)) = $crawler->filter('section.keyword-container a.title')->extract(array('_text', 'href')); $furigana = $crawler->filter('section.keyword-container rt.ruby')->text(); var_dump($title, $url, $furigana); ?> |< 質問から、tobeoscontinueさんとsasadaさんのアドバイスにより、Fatal errorはとれ値は取れるという少し進捗がありました。 ただしワーニングが取れず疲労困憊です。

sasadaさんのコメント
どうしても気になるのなら、ですが。。。 下記スクリプトの要領でgoutte.pharからgoutte.phar.tar.gzを作れます。(ファイル名を'myphar.phar'から'goutte.phar'に変えてください) これを展開すれば、「phar:///home/hoge/xxx.net/public_html/goutte.phar/vendor/guzzlehttp/guzzle/src/Adapter/Curl/CurlFactory.php on line 48」のソースが見られるので、その意味が分かるかもしれませんね。 >> phar 形式から tar 形式への phar アーカイブの変換 >|| <?php $phar = new Phar('myphar.phar'); $pgz = $phar->convertToExecutable(Phar::TAR, Phar::GZ); // myphar.phar.tar.gz を作成します ?> ||< << http://www.phppro.jp/phpmanual/php/intro.phar.html

wsappさんのコメント
ありがとうございます。 そんな手があるんですね。 試してみます。
関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ