PHPではてなブログの記事一覧を取得して表示
はてなブログの記事一覧を取得した!けど「はてなブログAtomPub」だけでは、アイキャッチ画像が取得できなかった!のでメモ
環境
PHP 5.6
※PHP 8.0.9 でも取得できることを確認済み
はてなブログAtomPubからURL取得
はてなブログ管理画面の 設定 > 詳細設定 > AtomPub のルートエンドポイントとAPIKeyを利用してBasic認証で取得
レスポンスはXMLで返ってくる
/* ---------------------------------------- はてなブログAtomPubから最新ブログURLを取得 ------------------------------------------ */ $url = HATENA_ENDPOINT; $userid = HATENA_USERID; $apiKey = HATENA_API_KEY; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET'); curl_setopt($ch, CURLOPT_USERPWD, "$userid:$apiKey"); curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); curl_setopt($ch, CURLOPT_FAILONERROR, TRUE); $entryListData = curl_exec($ch); curl_close($ch); $resultList = []; // 取得できなかった場合 if (! $entryListData) { return; } $result = new SimpleXMLELement($entryListData);
はてなブログoEmbed APIからデータ取得
/* ---------------------------------------- はてなブログoEmbed APIから表示用データを取得 ------------------------------------------ */ for ($i = 0; $i < count($result->entry); $i++) { $param = '?url=' . $result->entry[$i]->link[1]['href']->__toString(); $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, 'https://hatenablog.com/oembed' . $param); curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET'); curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); curl_setopt($ch, CURLOPT_FAILONERROR, TRUE); $resultData = curl_exec($ch); curl_close($ch); // 公開されていない記事や正しく取得できなかった場合は、スキップ if ($resultData === FALSE) continue; $entryData = json_decode($resultData, TRUE); // 適当に突っ込む $resultList[] = [ 'title' => $entryData['title'], 'description' =>$entryData['description'], 'published' => date('Y/n/j', strtotime($entryData['published'])), 'url' => $entryData['url'], 'image_url' => $entryData['image_url'], ]; }
出会ったエラー
はてなブログoEmbed APIのレスポンスが301 Moved Permanently
エンドポイントをhttp://
から https://
に変更する
変更後のエンドポイント
https://hatenablog.com/oembed
参考記事
developer.hatena.ne.jp developer.hatena.ne.jp
上位互換はありそうだけど、PHPのバージョン上げて確認したい