【PHP】PHPでスクレイピングをする
php-simple-html-dom-parserというライブラリを使う。
↑からライブラリをダウンロードしてプログラムを書くファイルと同じディレクトリに保存する。
<?php // simple_html_dom.phpの読み込み require_once "simple_html_dom.php"; // スクレイピングしたいサイトのURL $url = "https://www.example.com"; // $urlからオブジェクトを生成 $html = file_get_html($url); // 上記URLのページの1つ目のpタグを取得して出力。 // 1つ目のパラメータでタグを指定、2つ目のパラメーターで何番目かを指定 print_r($html->find("p", 0)->plaintext);
【PHP】連結の「.」「,」の違い
echoは「.」「,」両方使える
printは「.」のみ使える
「.」は連結した結果を出力する
「,」は連結せずに順次出力する
「.」は連結してから出力するため、「,」よりもやや遅い。
【CakePHP3】patchEntityの使い方
よくあるpatchEntityの使い方の例は、
$post = $this->Posts->get(1); $this->Posts->patchEntity($post, $this->request->getData()); $this->Posts->save($post);
こんな感じで、対象のデータを変数に格納して、そのデータにフォームから送られてきたデータで更新するみたいな感じだと思いますが、
これではフォームから送られてきたデータでそのまま更新されてしまうのでちょっとだけデータをいじりたいときどうやるんだろうってなりました。
調べてみたところ、$this->request->getData()には連想配列で値が格納されているらしいので、自分で連想配列を作って、それをpatchEntityに渡せば更新できるっぽいです。
例えば、postsテーブルのカラムがid, title, contents だとしたら、
$post = $this->Posts->get(1); $data = [ 'title' => 更新したい値, 'contents' => 更新したい値, ] $this->Posts->patchEntity($post, $data) $this->Posts->save($post);
これでデータを少しいじったりして、値の更新ができます。
また特定のカラムのみ値を更新したい場合は、
$this->Post->patchEntity($post, $data, [ 'fields' => ['カラム1'、'カラム2'] ]);
としてあげれば、意図していないカラムの更新を防ぐことができるっぽいです。