PHPのcurlの結果が展開されない

このQ&Aのポイント
  • PHPのcurlやsnoopyを使用して、外部サイトと連携するツールを作成しましたが、ログイン後のページの結果文字列がテンプレートのまま返ってきてしまい、展開されません。
  • テンプレートファイルの中身はhandlebars.jsの記法で書かれており、なぜ展開されないのか分かりません。
  • オプションの設定や他の方法を試しましたが、解決策が見つかりません。展開後の結果文字列を取得する方法を教えてください。
回答を見る
  • ベストアンサー

PHPのcurlの結果が展開されない

PHPのcurlやsnoopyといったライブラリを使用して、外部サイトと自動で連携できるようなツールをつくりたいと思っています。 自動でログインさせるところまではできたのですが、ログイン後遷移したページの結果文字列(html)がテンプレートファイルのまま返ってきてしまっており、内容が取得できません。 結果の文字列は <script type="text/x-handlebars-template"> ~ </script> で囲まれており、中身は <div class="header"> <div class="header_aa"> {{#user}}{{> profile}}{{/user}} </div> などとなっており、テンプレートファイルの記述のままで、変数が展開されていない状態です。 欲しいのはこれが展開(解釈)された後の結果文字列です。 名前からしてhandlebars.jsのテンプレートファイルを使用しているのは分かるのですが、なぜこれは展開されないのでしょうか? PHPプレーンのcurlでアクセスしても、snoopyを使用してアクセスしても結果は同じです。 オプションでもこれを解決するようなものが見当たらず、行き詰まっております。 どうすれば展開後の結果が取得できるのか、ヒントがあれば教えて下さい。 なにとぞよろしくお願い致します。

  • PHP
  • 回答数2
  • ありがとう数8

質問者が選んだベストアンサー

  • ベストアンサー
noname#244856
noname#244856
回答No.2

WebブラウザがやっているようなJavaScriptの実行処理をPHPでシミュレートする目的に対して、最近は「Selenium WebDriver」がよく使われているようです。 http://docs.seleniumhq.org/docs/03_webdriver.jsp

tsuyoc
質問者

お礼

おお、そんなものがあるのですね。知らなかったです。調べてみます。ありがとうございます。

その他の回答 (1)

  • t_ohta
  • ベストアンサー率38% (5081/13277)
回答No.1

ブラウザがアクセスした場合はJavaScriptをブラウザ側で実行してページをレンダリングしています。 なので、取得してきたHTMLファイルやJavaScriptファイルを、ご自身で実行して結果を導き出すしかありません。

関連するQ&A

  • PHPでcurl実行

    お世話になります。 PHPでcurlを使用して外部のサーバ上にあるプログラムを実行しようとしています。 $command = "curl -m 10 http://~~?param=~~~"; $result = shell_exec(command); このようにプログラム上で記述しているのですが、うまく動作しません。 正常な動作としては、処理を行った後に「TRUE」という文字列が返ってくるはずなのですが、 画面上に$resultの値を出力してみると、「~~~</body></html>」と、 なぜかHTMLタグが返ってきており、正常な処理が行われません。 ためしにコマンドライン上より curl -m 10 http://~~?param=~~~ を実行すると、「TRUE」という文字が表示されてきちんと動作しますので、外部に置いてある プログラムの問題ではなく、こちらで作成したPHPでの記述の仕方に問題があると思われるのですが どこを修正するべきか、アドバイス等いただけないでしょうか。

    • 締切済み
    • PHP
  • PHP テキストファイルの一部分を部分一致で

    PHP初心者です。 ホームページ作成で、共通メニューをテキストファイルで作り、require_once で呼び出しているのですが、同じテキストファイルの一部分を、文字列から検索して引っ張ってくるにはどうすれば良いのでしょうか? テキストファイル  <div class="menu_big">1. 東京都</div>  <div class="menu"><a href="xxx.1-1.html">1-1.千代田区</a></div>  <div class="menu"><a href="xxx.1-2.html">1-2.渋谷区</a></div>  <div class="menu"><a href="xxx.1-3.html">1-3.新宿区</a></div>  <div class="menu_big">2. 北海道</div>  <div class="menu"><a href="xxx.2-1.html">2-1.札幌市</a></div> 欲しい結果  '2-1' という文字列を使って、  2-1.札幌市  という文字列と、  <a href="xxx">2-1.札幌市</a>  の文字列の、ふたつが欲しいのです。 ぱんくずリストやタイトル部分での使用を考えています。 テキストファイル内を改行で調整した後にfile()で配列化→行数指定ではできたのですが、文字列の部分一致から結果が欲しいのです。array_searchやpreg_grepなど試してみたのですが、知識不足でうまくいきませんでした…。 どなたか詳しい方、よろしくお願いします。

    • ベストアンサー
    • PHP
  • PHPのcURLによるログインについての質問

    PHPのcURLによるログインについての質問をさせて頂きます。 会員サイトでIDとPASSの入力を行い、ログインをしてページの移行していくPHPの コードを書いておりますが、途中ページで検索BOXのフォームにキーワードを入れて 次のページに移行する必要があるのですが、ページ移行ができない状況であります。 質問をさせて頂きたい内容ですが、フォームへの入力が必要となるため、 下記のコードの入力項目である【$params01】又は他の部分に どのような記述をすればよいかをご教授いただければと思います。 サンプルコードなどを掲載しているサイトなどで調べていましたが、 【$params01】の配列のkeyの部分がname属性としているようなのですが、 今回ログインをするページの検索BOXのフォームにはname属性は付けられていないようです。 よろしくお願いいたします。 【$params01】 $params01 = array( "dscrCdNm" => '7893', "marketCd" => '検索' ); $address01 = 'https://xxxxxxxxxx.co.jp/xxxxxxxxxx'; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $address01); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file_path); curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file_path); curl_setopt($ch, CURLOPT_POST, TRUE); curl_setopt($ch, CURLOPT_POSTFIELDS, $params01); $inputcode = curl_exec($ch) or die('error ' . curl_error($ch)); mb_language("Japanese"); $order_adress = mb_convert_encoding($inputcode, "UTF-8", "auto"); print($order_adress); 【検索BOXのフォームのHTML部分】 <div class="box-search-stock-01 mb00" > <fieldset> <legend>検索</legend> <p class="search"> <label for="ss-02">名前・コード</label>: <input type="text" name="dscrCdNm" value="" id="ss-02"> <input type="hidden" name="marketCd" value=""> <input type="hidden" name="industryCd" value=""> <input type="image" src="/member/images/btn-search-02.gif" class="roll img-ipad" value="検索" title="検索" /> <span style="padding: 0 0 0 20px;"><a href="javascript:void(0);" onclick="modalOpenAction();return false;">→詳細検索はこちら</a></span> </p> </fieldset> </div> <input type="hidden" name="offsetRow" value=""> <input type="hidden" name="trdKbn" value="10"> <input type="hidden" name="pageNo" value="1">

    • ベストアンサー
    • PHP
  • PHPの文字コードについて

    Wordpressで作成してWebページを作成しているPHP初心者です。 WordpressでUTF-8ボム無と指定されているので、全てUTF-8ボム無で揃えています。 PHPで出力される文字列は問題ないのですが、PHP内に日本語を埋め込んで 出力しようとすると下記の「更新日」の部分がXYなどと文字化けします。 ブラウザ上でShift-jisに変更すると「更新日」はきちんと表示されますが、 他の出力される文字列が化けてしまいます。 どこかで文字列の指定をしなければならないのでしょうが、まったくわかりません。 (FTP上でサーバーファイルを見た文字列は化けていません。 ブラウザに表示される段階で文字化けします。) どこをどのように変更、または追加したら良いのでしょうか。 <article <?php post_class(); ?>> <header class="entry-header"> <time pubdate="pubdate" datetime="<?php the_time('Y-m-d'); ?>" class="entry-date"> <?php echo'更新日:' ?><?php the_time(get_option('date_format')); ?></time> <h1 class="entry-title"><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h1> </header> <section class="entry-content"> <?php the_content(); ?> </section> </article> 宜しくお願い致します。

    • 締切済み
    • PHP
  • phpで文字列に入ったhtmlタグの中身を取得

    phpで次の文字列の中身を自分の思ったように取得したいです。 -----$textの中身 <div class="hoge">ほげほげ1<div class="piyo">ぴよぴよ</div>ほげほげ2</div> -----自分の実行したphpコード preg_match_all("/<div class=\"hoge\">(.*?)<\/div>/s", $text, $textArr); -----結果($textArr[0]) ほげほげ1<div class="piyo">ぴよぴよ -----自分の望む結果($textArr[0]) ほげほげ1<div class="piyo">ぴよぴよ</div>ほげほげ2 ---------------------------------- divタグの中にdivタグが入っている時、 最初の/divに反応してしまいます。ちゃんと、ほげほげ2まで取得する方法を教えてください。

    • 締切済み
    • PHP
  • cURLでcookieを送受信する方法について

    いつもお世話になっています。 phpで、Webページに自動でログイン+ページ遷移するためのスクリプトを作成しています。 Webページなどを参照し $url='http://webpage.jp'; $cookie=tempnam(sys_get_temp_dir(),'cookie_'); $curl=curl_init(); curl_setopt($curl,CURLOPT_URL,$url); curl_setopt($curl,CURLOPT_COOKIEJAR,$cookie); curl_exec($curl); curl_close($curl); $curl=curl_init(); curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1); curl_setopt($curl, CURLOPT_COOKIEJAR, "cookie"); curl_setopt($curl, CURLOPT_COOKIEFILE, "tmp"); curl_setopt($curl, CURLOPT_POST, TRUE); $output = curl_exec($curl); print_r(curl_getinfo($curl)); curl_close($curl); とすることで、cookieをファイルとして保存しページ遷移できることを確認しました。 そこで、cookieをディスクに書き込まずにメモリ上に保存してやりとりが出来ないかと思い $cookie = fopen('php://memory', 'r+'); として見ましたが、うまくいきませんでした。 cookieをメモリ上に保存して利用する方法はありますか? お願いします。

    • ベストアンサー
    • PHP
  • PHP+smartyで文字化け

    PHP+smartyでサイトを作成し始めました。(以下URL) http://babyitem.info/ PHPファイル、テンプレート共に、文字コードはEUCで作成しています。 サーバーは、ロリポップをレンタルしています。 index.phpは以下の通りです。 ----------------------------------------------------------- <?php $contents_title="ベビーアイテム.info"; $tpl->assign("contents_title",$contents_title); $tpl->display("babyitem.tpl"); ?> ----------------------------------------------------------- babyitem.tpl(上記サイト左の部分)は以下の通りです。 ----------------------------------------------------------- <div id="left"> <div class="left_top">{$contents_title}</div> <div class="left_bottom"></div> </div> ----------------------------------------------------------- テンプレートファイルの{$contents_title}に 「ベビーアイテム.info」という文字をassignしているのですが、 文字化けして表示されてしまいます。 ちなみに、「babyitem.info」という文字をassignすると、 そのまま、「babyitem.info」と表示されます。 正しく表示する為には、どの辺りの設定を確認すれば良いでしょうか? ご教授くださいませ。

    • 締切済み
    • PHP
  • phpのプログラミングについての質問です。

    外部ファイルにテンプレートと言うか、データとしてHTMLの書かれたファイルを置くとします。 そして、メインのphpのファイルで変数や定数の処理をさせて、その外部HTMLファイルを読み込ませ、HTML内に記載した変数等を表示させるとします。 // tmp.html // <html> <body> <div> <p>こんにちは{$php}です。<br> 今日は{ConstTest::CONST_TEST}ですね。</p> <p>どうも。{$aisatsu.$php2}です。<br> 今日は{$tenki[1]}なので、悪い天気ですよ。</p> </div> </body> </html> // tmp.html ここまで // 上記のような{$変数}と言う、{ と } で囲った書き方のプログラムを良く見かけるのですが、 phpプログラム内で、どう処理させれば、表示できるのでしょうか? また、上には書きましたが、下記のように定数のクラスファイルも外部に作って、表示させることは可能でしょうか? そもそも、定数も{}で表示させることは可能なんでしょうか? もうひとつ、{$a.$b}の様に文字列の入った変数をドットでつなげると言う書き方も可能でしょうか? // main.php // <?php require_once('./class.php'); $php = 'アマガエル'; $aisatsu = 'こんにちわ。'; $php2 = '椎名アップル'; $tenki = array('晴れ','雨','曇り'); // 処理の仕方が解からないので、デタラメな?の部分です $hoge = file_get_contents('./tmp.html'); echo $hoge; // ?の部分終わり exit; ?> // main.php ここまで // // class.php // <?php class ConstTest { const CONST_TEST = '雨ですが、良い天気'; } ?> // class.php ここまで //

    • ベストアンサー
    • PHP
  • RubyのHTMLパーサーで複数のタグを抽出したい

    現在、Rubyを用いて あるWebページから特定のタグの要素を抽出して テキストデータに出力したいと思い、プログラムを書いているのですが、 途中で行き詰ってしまいました。 ちなみにHpricotやNokogiriといったHTMLパーサーを試してみました。 パーサーを使うのは初めてです。 例えば以下のようにHTML文書に抽出したい部分がDIVタグとPタグに囲まれていた場合、 ===================================== ・・・ <div class="content"> <div class="header">不要部分</div> <div class="title">抽出したい文字列1</div> <div class="subtitle">抽出したい文字列2</div> <div class="subtitle">抽出したい文字列3</div> <p class="paragraph">抽出したい文字列4</p> <p class="paragraph">抽出したい文字列5</p> <div class="comment">抽出したい文字列6</div> <div class="footer">不要部分</div> </div> ・・・ ===================================== このHTMLからまずは 抽出したい文字列1 抽出したい文字列2 抽出したい文字列3 抽出したい文字列4 抽出したい文字列5 抽出したい文字列6 といった出力が得たいのです。 プログラムも書いてみました。 ===================================== #ドキュメント全体を取得(dataにはHTMLの文字列が入っている) html = Hpricot(data) #内容部分(contentクラスのdiv)を取得(CSSセレクタで記述) content = html/"div.content" ===================================== ここまでは良いのですが、 そのあと、div要素を取り出すだけであれば headerクラスと、footerクラスを抽出しないように ===================================== (content/"div:not(.header):not(.footer)").each{ |line| puts line.inner_html } ===================================== とすることで、 抽出したい文字列1 抽出したい文字列2 抽出したい文字列3 抽出したい文字列6 が得られますが、pタグをカンマでdivの前に追加して ===================================== (content/"p,div:not(.header):not(.footer)").each{ |line| puts line.inner_html } ===================================== のようにすると、 抽出したい文字列4 抽出したい文字列5 抽出したい文字列1 抽出したい文字列2 抽出したい文字列3 抽出したい文字列6 のように出力されます。 同様にdivの後にpを追加し ===================================== (content/"div:not(.header):not(.footer),p").each{ |line| puts line.inner_text } ===================================== のようにすると 抽出したい文字列1 抽出したい文字列2 抽出したい文字列3 抽出したい文字列6 抽出したい文字列4 抽出したい文字列5 のようになってしまいます。 つまり、複数のタグを指定すると、指定した順序で抽出されるようです。 代わりに子供すべてを列挙するchildのようなものがあるかと、調べてみたのですが、 どうやらそのような書き方はないようです。 複数のタグを含む場合にはHTMLパーサーでは解析できないのでしょうか。 パーサーは抽出時に順番を保証はしてくれないのでしょうか。 あきらめて、正規表現で抽出しようと思いましたが、 ===================================== <div class="comment"> <div class="comment_header">ごちゃごちゃ</div> <div class="comment_body">抽出したい要素6</div> </div> ===================================== などDIVが入れ子となっている場合に、 非常にややこしく感じたので お手上げ状態です。 どのように、解決できるでしょうか。 よろしくお願いします。

    • ベストアンサー
    • Ruby
  • PHPが出力したHTMLにinclude文を

    PHP4.3で、HTMLファイルをテンプレート出力する方式の掲示板を使っているのですが、テンプレートのHTMLファイル内に別のPHPスクリプトで出力した表示を貼り付けようと思い、 <?include("hoge.php");?> とinclude文を書き込んだのですが、これが反映されずにソース内に<?include("hoge.php");?>という記述がそのまま出て来てしまいます。 これが出来ない原因は、PHP実行→HTML表示→HTML内のPHP実行という二度のPHP実行が出来ないのか、<?include~を「文字列」として認識してしまっているのかのどちらかだと思うのですが、、 PHPファイルには一切手が加えられない状況なので、テンプレートHTMLに手を加えるだけで別のPHPスクリプトを読みこませたいのですが、何かいい方法は無いでしょうか?

    • ベストアンサー
    • PHP

専門家に質問してみよう