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);
?>
|<
以下、質問の続きは文字数の関係で補足に記載します。
よろしくお願いします。
コメント欄にある、キーワード「紺野あさ美’」は作成されてないので取得出来ないと思います。
取得する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ソースを見た限り)
最初、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
質問文を編集しました。詳細はこちら。
なんかの変数が空みたいですよ?
このプログラムの途中で変数を変数に格納されようとしていますが、
格納前にprint文をはさんでみてください。
おそらく何かがnullを返してエラーします。
Goutte depends on PHP 5.4+ and Guzzle 4+.
とあります。
ところで、ClientInterface.phpとは何でしょうか?
ご教授いただけないでしょうか?
それと、PHP5.4.26も試しましたが、PHP5.5.10と同じエラーでした・・・。
というのは関係ありませんか?
チンプンカンプンでスミマセンm(_ _)m
にあると思います。
https://github.com/guzzle/guzzle/blob/master/src/ClientInterface.php
現在は4.2.1のようです。
const VERSIONが4未満ならguzzleを入れ直す必要があると思いますが
GoutteはGuzzleに依存しているということですね。
日本語のGoutteを紹介しているサイトはgoutte.pharをインクルードすれば・・・みたいなことを書いてあるサイトばかりでしたので、本家サイトのGuzzleの文字は全く目に入っていませんでした
m(_ _)m
GoutteとGuzzleを合わせ検索かけてみます。
ところで私が参照したサイトで、Goutteが動いている方はGuzzleはインストール済みだということですかね???
それとも、違う前バージョンはGoutte単体で動いていたのか???
これも併せて調べてみます。
ありがとうございました。
*.pharなんてファイル初めて見たので、まったく解釈できずにいます・・・。
スミマセン(´・ω・`)
でguzzlehttpで始まればguzzle4とのことですのでPHP5.5.10ではokと思いますorz。
https://www.xserver.ne.jp/manual/man_server_log.php
エックスサーバーのエラーログの方にもう少し詳しいエラーログは出ていないでしょうか。
CURLOPTの値はcurlのバージョンによってあったり無かったりするようでその辺が関係しているかもしれません。
phpinfo()でcurlのバージョンを調べることが出来ます。
おっしゃる通りgoutte.pharの最新をダウンロードすれば、Guzzleが勝手に入ります。(4.1.0でした)
というかその時だけ。
必要なものがまとめられ、圧縮されているようなもので実行時に展開されて必要なものが使われるようです。
結局、的外れでしたorz。
の下の方にデンジャラスさんが書いていました。
はてなのタグ名? キーワード? が変更されているからのようです。
変更して実行してみて下さい。
>紺野あさ美さんはまだ作成されていないとなるので上手くいかないかもしれません。
何度もありがとうございます。
デンジャラスさんのコードで行っても
Warning: curl_setopt_array(): Array keys must be CURLOPT constants or equivalent integer values in phar:///home/seadwell/gate-x.net/public_html/goutte.phar/vendor/guzzlehttp/guzzle/src/Adapter/Curl/CurlFactory.php on line 48
はとれずにいますorz
このメッセージは $client->request の行で出ているので、何だかこちらではどうしようもない気がしてきました。
ところで、教えていただいた
http://d.hatena.ne.jp/hnw/20140824
に記載されているGuzzleに興味がわいてきました。
いま、挙動をいろいろ確認している最中です。
これで上手く行かないようならphp関数のfile_get_contentsを使いコツコツ作ります。
ありがとうございました。
ワーニングなので実行されていると思ったのですが。
$crawlerをvar_dump()してみてはどうでしょう。
<?php
error_reporting(E_ALL);
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');
var_dump($crawler);
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);
気持ち悪いですがワーニング表示を止めるなら
http://php.net/manual/ja/function.error-reporting.php
というテもあります。
更に
http://php.net/manual/ja/language.operators.errorcontrol.php
では通常止まるようなエラーでも実行を続けたと思います。
PHP 5.4.4, curl 7.26.0ではワーニングは出なかったんですが
エックスサーバーの環境依存なのか謎です。
書き方が悪かったですね。
実行されて値も取れています。
Warning が気持ち悪くそればかり伝えようとしていましたm(_ _)m
いろいろアドバイスをいただいて、散々調べていますがいまだWarningは取れないでいます。
もうムキになっています。