DOMをPHPで操作できたらいいよね

そうだよね。そう思うよね。JavaScriptでやると、画面がガタついたりするもんね。そうならないようにする方法もあるかもしれないけど、僕はできませんので、サーバー側でなんとかできたらええなぁと思って挑戦したけど、できませんでしたよ。

PHP標準でHTMLをDOMにできるらしい

今、技術検証中ですが、new DOMDocument()とnew DomXpathを利用することで可能なようです。なんでこれやろうかと思ったかといえば、このブログ、イメージをアイキャッチで設定していなかったので、テーマ変えたら画像出ないんですね。なんで、昔の自分は、既製品より使いやすいオリジナルテーマ作れないくせに作ろうと思ったのか小一時間くらい問い詰めてやりたいですね。

DOMにしたい動機

順番違うよねって感じですが、DOMにしたい動機としては、このN1というテーマの前はアイキャッチ設定せずに、記事内にIMGぶち込んでたんですね。一番最初に入れたIMGをアイキャッチとして使おうねってルールでやってました。なので、アイキャッチに設定されているクラスとの齟齬が起きて、レイアウトが若干?崩れるんですよね。TOPの。なのでIMGタグの1件目を取得して、取得したIMGタグのClass書き換えてやろうと思ったんですね。齟齬をなくすために。

さすがにIMGの1件目は取れましたよ。

functions.phpにとりあえず、IMG取得する正規表現書いて、取得したデータの1件目を貰うというプログラムを書きました。

GISTアップしておきます。

PHPでDOM扱うのはちょっと勉強がいる

私が無知なだけなんですけど、jQueryとかの感覚でやれそうな感じなんだけど、上手く行きませんでした。行ってる人教えてください。とりあえず、DOMDocumentのインスタンス作って、そこに読み込みたいHTMLをloadHTMLして、その結果をDomXpathにぶち込んでqueryで検索してからitemの0番目にアクセスしてDOM引き当てて、removeAttributeした後setAttributeでclass合わせればいいでしょうと思ったんですが、removeAttribute使おうとしたときにcall to a member functionが発生。インスタンス作成の順序も間違っていないはずなのに、エラーが出ました。調べたらPHPのバージョンが古いからじゃねって言ってる人がいた<いってない>ので、5.5から7.2に上げましたが、結果は一緒でした。いや、エラーメッセージが変わるだけでした。こっちもGISTやっときましょう。

くわしいひといたら教えてください。

とりあえず、ひたすらコード書いて、サーバー更新したりして、楽しかった。ぶつくさ言ってないでコード書くのもたまにはいいかもしれませんねぇ。
僕は答えにたどりつけませんでしたが、この記事を読んだ人が辿り着けるかもしれないので、自分が見たものリンク貼っときますね。がんばってくだしあ。

PHPネイティブのDOMによるスクレイピング入門
DOMElement::removeAttribute
DOM, XPathを使ったスクレイピング(HTMLのタグ内容取得)
CentOS7のPHPのバージョンを5.4.xから5.6.x/7.0.x/7.1.xに..

しかし、Qiitaわっかりやすいし見やすいっすねー。


スポンサーリンク

この記事が気に入ったら
フォローしよう

最新情報をお届けします

おすすめの記事