PHP CURLで取得した情報をPDOを使ってMySQLのテーブルに保存する方法の概要をまとめました。
PHP CURLでWebページにアクセスして情報を取得する部分の詳細については下記記事参照。
PHP CURLで検索条件を入力するWebページの情報を取得
ここでは、商品一覧情報や賃貸物件情報など1Webページ内に複数の商品情報があり、その商品情報を各商品の名前、価格などの仕様を商品単位に保存する場合を例にしています。
1)PDOでデータベースへの接続
$dsn = 'mysql:host=localhost;dbname='.$database.';charset=utf8'; try { $dbh = new PDO($dsn, $username, $password, array( PDO::ATTR_EMULATE_PREPARES =>false, PDO::MYSQL_ATTR_INIT_COMMAND => "SET CHARACTER SET `utf8`", PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION ) ); } catch (PDOException $e) { exit('データベース接続失敗。'.$e->getMessage()); }
2)PDOのprepareメソッドで実行するSQLを準備
$st = $dbh->prepare(“INSERT INTO PDO (id,name,price,count,・・) VALUES (:id,:name,:price,:count,・・)”);
3)PHP CURLでWebページ取得
$target = "http://www.example.com"; $agent = "Mozilla/4.0 ・・・・・"; $ref = "http://www.example.com/ref.htm"; $sc = curl_init(); curl_setopt($sc, CURLOPT_URL, $target); curl_setopt($sc, CURLOPT_RETURNTRANSFER, TRUE); curl_setopt($sc, CURLOPT_USERAGENT, $agent); curl_setopt($sc, CURLOPT_REFERER, $ref); $web_page = curl_exec($sc); curl_close($sc);
4)商品一覧情報から1商品あたりの情報を抽出
1Webページ内に複数の商品情報があるので、商品単位に情報を抽出し、$ary_matchという配列に保持します。
$pattern = ‘/\”Level1\”(.*)class=\”Level2_3\”/siU’;
preg_match_all($pattern, $web_page , $ary_match);
※$web_page:PHP CURLで取得したWebページ全体の情報
5)商品名、価格など個別情報を$result_array配列に保持
$i = 0; $result_array = array(); foreach ($ary_match[1] as $match) { if ( preg_match("/名前.*value1\">(.*)<\/td>/siuU", $match, $item_array) ) { $result_array[$i]['name'] = $item_array[1]; } if ( preg_match("/価格.*value2\">(.*)<\/td>/siuU", $match, $item_array) ) { $result_array[$i]['price'] = $item_array[1]; } : : $i++; }
6)1商品毎にテーブルに登録
1商品毎に情報を読み出し、PDOでSQLを実行しテーブルに保存します。上記2)PDOのprepareメソッドで指定したパラメータに取得した値をバインドしてSQLを実行します。
foreach ($result_array as $index) { foreach ($index as $key => $val) { switch ($key){ case 'id': $st->bindValue(':id', $val , PDO::PARAM_STR); break; case 'name': $st->bindValue(':name', $val , PDO::PARAM_STR); break; case 'price': $st->bindValue(':build', $val , PDO::PARAM_INT); break; : } } $st->execute(); }関連記事の目次
-
インストール、設定
- PHPの設定、更新時の参考情報メモ
- PHPのインストール
- CentOS6でPHP5.3からPHP7.1へアップデート
- CentOS6.10でPHP7.1からPHP7.2へアップデート
- CentOS Stream9でPHP7.4をインストールする手順
- CentOSでPHPのマルチバイト文字列(MBstring)関数を使えるようにする
- PHPでタイムスタンプをログファイルに記録
- PHPのバージョンが表示されないようにする
- セキュリティを考慮した/etc/php.iniの設定
- CentOS6でAPC(Alternative PHP Cache)をインストール、チューニング
- PHPスクリプトで出力データを圧縮する方法
- PHPの変数、スコープ
- PHPの型の概要、種類
- PHPのクラス操作の概要
- PHPの配列操作の概要
- PHPで文字列のマッチング
- require,require_once,include,include_onceの違い
- CentOS環境のPHPでPDOを使ってMySQLからJSONでデータ取得
- PHPでHTMLテーブルをJSONに変換
- PHPでディレクトリ内のファイル一覧をJSONで出力
- PDOを使ってテーブルに保存
- PDOでSQLインジェクション対策
- phpとpChartを使ってWebサイトにグラフ表示
性能
プログラミングの基本
PDO、データベース、JSON
その他