- ベストアンサー
cURLを使用して特定の文字列を抜き出す方法
- cURLを使用して特定の文字列を抜き出す方法についてご質問があります。詳細な質問内容を解決するために、連想配列に情報を格納する方法を知りたいです。
- 質問文章では、特定のページから店舗名や住所、一定の文字列を抜き出したいとのことです。現在はcURLを使用してページの内容を取得できていますが、どのようにして抜き出すかが分からない状況です。
- プログラムの一部を提示していますが、最初の■からの文字列は取得できることが確認できます。しかし、それ以降の処理については分からないようです。連想配列に情報を格納する方法が分かれば、問題を解決できると思います。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
cURLとfile_get_contentsのパフォーマンスの違いを気にされるということは、この処理をループさせるという事でしょうか?もしそういうことであれば単にcurl_exec関数を繰り返す「同期」処理よりも、curl_multi_exec関数を利用して複数のリクエストを一斉に実行する「非同期」処理を行ったほうが劇的に処理速度が向上するので、その前提でコードを提示します。 コードはこちらになります。 http://pastebin.com/ZAdmSnSj 正規表現のテストはこちらです。 http://ideone.com/Lgd8Pl 実際に使っていただくのはget_shop_info関数になります。配列で「ショップID」を渡してください。なお、MultiRequestクラスは非常に汎用性を高くして設計してあるので、他の用途にもいろいろ使えるのではないかと思います。
その他の回答 (1)
このケースでは特にcURLに拘る意味もなさそうなのでシンプルにfile_get_contentsではどうですかね?それとpreg_match_allを組み合わせます。RuntimeExceptionをスローするので呼び出し側でCatchしてあげてください。 <?php function get_shop_info($shop_id) { $url = "http://example.com?id={$shop_id}"; $regex = ''; switch (true) { case ($html = @file_get_contents($url)) === false: throw new RuntimeException('ページ取得に失敗しました'); case !preg_match_all($regex, $html, $m): throw new RuntimeException('HTML解析に失敗しました'); } return $m; } なお、提示された情報だけでは実際のHTMLの情報が分からないので$regexを書くことは出来ません。実際にサンプルページのURLを提示して頂くか、ご自分で正規表現を構成してください。
お礼
ありがとうございました。非常に助かりました。
補足
丁寧なご対応、ありがとうございます。 file_get_contentsがシンプルで良いとは思ったのですが、curlの方が処理が早くとのことでスキルアップも含めて今回はcurlで進めています。 説明が不十分で誠に申し訳ございませんでした。 htmlのソースは以下のようになっています。 <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <title></title> <meta name="description" content="" /> <meta name="keywords" content="" /> <meta http-equiv="Content-Language" content="ja" /> <meta http-equiv="Content-Style-Type" content="text/css" /> <meta http-equiv="Content-Script-Type" content="text/javascript" /> </head> <body> <br> 【店舗情報】<br> ■店舗名 『保険代理店A』東京中央店<br> ■取扱募集代理店 株式会社ほけんプラプラ<br> ■所在地 東京都中央区2-2 田中ビル5F<br> ■電 話 0120-00-0200<br> ■開店日 2011年3月1日(火)<br> ■営業時間 10:00~18:00<br> ■対応コース 来店<br> <br> </body> </html> 連想配列で受け取りMYSQL5系のDBにUPDATAするつもりです。
お礼
ありがとうございます
補足
猛烈にありがとうございます。本当にスゴいですね、尊敬します。 ideoneと言うサイトも知らなかったので非常に便利で本当に助かりました。 正規表現のテストは思うようにページからデータを収集できましたデータの処理を追記してMysqlにもつなげることができました、ありがとうございます。 ただ、コードでの方がレベルが高すぎて完全に理解できなくて‥ example.com?id=を書き換えて、get_shop_infoを呼び出してarrayにidを入れるのかなと何となくは理解できるのですが、うまく動かすことが出来ませんでした。 せっかく教えて頂いたのに私がバカなばっかりに申し訳ないです。 もう少し勉強をして頑張ってみます。