独学者Fossa

独学していることなど

制作中(3)

前回の続きです。

ブラウザのデベロッパーツールのElementsから、HTMLをコピーしました。

<tr>
 <td>
   <a href="https://blog.hatena.ne.jp/opll_inaka/" rel="nofollow">
     <img class="profile-image" src="https://cdn.profile-image.st-hatena.com/users/opll_inaka/profile.png?15*****707" alt="opll_inaka" title="opll_inaka" width="16" height="16">
     <span class="username" data-load-nickname="1" data-user-name="opll_inaka">
       <span class="user-name-nickname">Fossa(フォッサ)</span> <span class="user-name-paren">(</span><span class="user-name-hatena-id">id:opll_inaka</span><span class="user-name-paren">)</span>
     </span>
   </a>
 </td>
 <td>
   <time datatime="2020-10-31T16:34:36Z" data-relative="" data-epoch="1604162076000" class="time subscribed-time">1日前</time>
 </td>
</tr>

Symfony DomCrawler

Symfony
Symfony

Symfony DomCrawler Component v5.1.8を、使います。

$htmlには、上記のHTMLが代入されているのが、前提です。

<?php

use Symfony\Component\DomCrawler\Crawler;

<省略>

$crawler = new Crawler($html);

$nodeValues = $crawler->filter('table > tbody > tr')->each(function (Crawler $node, $i) {
    $array['hatena_id'] = $node->filter('td > a > span')->attr('data-user-name');

    if ($node->filter('td > a > span .user-name-nickname')->count())
    {
        $array['nickname'] = $node->filter('td > a > span .user-name-nickname')->text();
    }
    else {
        $array['nickname'] = $array['hatena_id'];
    }

    $array['datetime_utc'] = $node->filter('td > time')->attr('datatime');

    return $array;
});

取得できるもの

  • はてなID
  • user-name-nicknameがある場合、ニックネーム
  • user-name-nicknameがない場合、はてなIDを入れる
  • 読者になっていただいた時の日時(標準時)

phpシンタックスハイライト

はてなブログの場合、<?phpを頭に書かないと、シンタックスハイライトしないみたい。

『なんで、こんなところに<?phpって書いてるねん』って、誤解される場合がありそうで、嫌だなぁ。

今日は、ここまで。