メシのタネ

めしのたねになるIT情報配信サイト


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

, , ,

  1. Webプログラム
  2. PHP
  3. 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わっかりやすいし見やすいっすねー。



コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

This site uses Akismet to reduce spam. Learn how your comment data is processed.

若い頃、「仕事中にハマったこと」や「誰かに共有したい技術的な気づき」をアウトプットしたくてブログを始めましたが、勢い任せでよく分からない記事を大量生産し、あえなく飽きて終了。

改めて今、キャリア15年分の経験や知識が、これからITエンジニアを目指す方や、同じような課題で悩んでいる現役エンジニアの「メシのタネ」になるような記事を残したいと思っています。
※過去の記事は見ると精神が崩壊するため、そっとしておいてください。

🛠 経歴という名の珍道中:
文系Fラン → 広告営業 → Web営業 → 通信営業 → Web進行 → 出版 → Web媒体運用 → ソフトウェアハウス → SES → フリーランス

専門教育も受けず、転職歴も多数。履歴書はまるで時系列の事故記録のようですが、試行錯誤を重ね、なんとかエンジニアとして食べています。

このブログでは、そんな「履歴書クラッシャー型エンジニア」が送る、
名古屋一敷居の低い、実務に役立つ技術ブログを目指します。

PHP
魔王と行く! / Interface / Polymorphism / Ontology 深淵ガイドNew!!
Laravel
Laravel 12、「コード 1 行も書き換えず未来へ」──静かな革命の手順書New!!
Laravel
LaravelのMiddlewareって意味あるの?仕組み・使いどころ・やらかしまで整理してみたNew!!
Laravel
ServiceProviderって何してるの?DIの背後で動いてるやつの正体New!!
Laravel
LaravelのサービスコンテナとDI、「書いてるだけで動く」コードの正体
Laravel
Laravelのアーキテクチャ、実は誰もわかってない説