toarupg0318 / hatena-blog-client
A Hatena blog client package.
1.0.0
2023-05-20 06:40 UTC
Requires
- php: ^8.1
- ext-simplexml: *
- guzzlehttp/guzzle: ^7.5
Requires (Dev)
- mockery/mockery: ^1.5
- pestphp/pest: ^2.4
- phpstan/phpstan: ^1.10
- rector/rector: ^0.15.24
- symfony/var-dumper: ^6.2
- vlucas/phpdotenv: ^5.5
This package is auto-updated.
Last update: 2024-10-28 10:44:58 UTC
README
使い方
PHP 8.1+ が必要です
準備
はじめに、はてなブログに接続するために認証情報を詳細設定から取得してください。
以下コマンドでcomposerでインストールしてください。
composer require toarupg0318/hatena-blog-client
以下のようにクライアントインスタンスを取得します。
use Toarupg0318\HatenaBlogClient\HatenaClient; ... $hatenaClient = HatenaClient::getInstance( 'あなたのはてなID', 'あなたのブログID', 'あなたのAPIキー' );
記事投稿
- HTMLモード(見たままモード)
- はてな記法モード
での投稿ができます。 ※ マークダウン記法は未実装です。
以下、各モードでのサンプルコードを記載します。
HTMLモード(見たままモード)
事前に基本設定で編集モードは"見たままモード"に切り替えてください。
$content = <<<CONTENT <main> <style> h2 { font-size: 24px; color: red; } a { color: #1a73e8; text-decoration: none; } a:hover { text-decoration: underline; } </style> <section> <h2>見出し1</h2> <p>これは<em>サンプルの文章</em>です。 この記事では、簡単なHTMLサンプルを紹介しています。詳細については、<a href="#">こちら</a>をクリックしてください。</p> </section> <section> <h2>見出し2</h2> <p>この<em>サンプル記事</em>は、HTMLタグをいくつか使用しています。これにより、より見栄えの良いコンテンツを作成できます。</p> <ul> <li>リスト項目1</li> <li>リスト項目2</li> <li>リスト項目3</li> </ul> </section> </main> CONTENT; $response = $hatenaClient ->post( content: $content, title: 'HTML投稿', draft: false, categories: ['foo', 'bar'] // はてなカテゴリ編集画面で存在しないカテゴリは新規追加されます ); // $response->getParsedData(); // レスポンス取得 // $response->getEntryId(); // ブログのエントリID(記事のユニークID)の取得
はてな記法モード
事前に基本設定で編集モードは"はてな記法モード"に切り替えてください。
$hatenaSyntaxContent = HatenaDOMDocument::create() ->appendTableOfContents() ->appendH3('見出し h3') ->appendH4('見出し h4') ->appendH5('見出し h5') ->appendText( <<<TEXT はてなブログは、あなたの思いや考えを残したり、 さまざまな人が綴った多様な価値観に触れたりできる場所です。 TEXT ); $response = $hatenaClient ->post( content: $hatenaSyntaxContent, title: 'はてな記法投稿', draft: false, categories: ['foo', 'bar'] );
その他のはてな記法の機能についてはこちらを参照ください。
記事一覧取得
最新10件を取得できます。
$getListResponse = $hatenaClient->getList(); // レスポンスを連想配列形式で取得 $getListResponse->getParsedData(); // また、記事一覧取得に限らず、以下のようにレスポンスを取得することもできます // この場合、XML形式の文字列となります // $getListResponse // ->getBody() // ->getContents();
最新10件以降の古い投稿は後述する"次のページURL"を引数に指定して実行することで取得できます。
$hatenaClient ->getList('https://blog.hatena.ne.jp/foo765/foo765.hatenablog.com/atom/entry?page=1695039555'); ->getParsedData();
"次のページURL"は以下のように取得できます。
$getListResponse = $hatenaClient->getList(); $getListResponse->getNextPageUrl(); // 'https://blog.hatena.ne.jp/foo765/foo765.hatenablog.com/atom/entry?page=1695039555'
記事取得
// 最新のエントリIDを取得する $latestEntryId = $hatenaClient ->getList() ->getParsedEntries()[0]['entryId'] ?? null; $getEntryResponse = $hatenaClient->getPostByEntryId($latestEntryId);
記事編集
$hatenaSyntaxContent = HatenaDOMDocument::create() ->appendTableOfContents() ->appendH3('見出し h3') ->appendH4('見出し h4'); $editResponse = $hatenaClient ->edit( entryId: '4207575167685628272', content: $contentToEdit, draft: false, customUrl: 'happy new year 2023' ) ->getParsedData();
※ 既存の公開記事を下書きに変更することはできません。
記事削除
取得したエントリIDを引数に指定して記事を削除することができます。
$hatenaClient->deletePostByEntryId('4207575167685628272');
開発者向け
開発への参加
開発の方針がまだ定まっていないですが、プルリクエストは適宜受け付けています。
テストの実行
プロジェクトのルートディレクトリの .env.example をコピーして .env を作成します。
cp .env.example .env
新規作成した .env に自分のはてなブログAtomPub接続情報を追記します。
HATENA_ID=hoge6789 HATENA_BLOG_ID=hoge6789.hatenablog.com HATENA_API_KEY=foo78bar90
その後、以下コマンドで Pest によるテストを実行できます。
./vendor/bin/pest
静的解析
PHPStan
以下コマンドで PHPStan による静的解析を実行できます。
./vendor/bin/phpstan analyse
Rector
以下コマンドで Rector による静的解析を実行できます。
./vendor/bin/rector process src # dry run # ./vendor/bin/rector process src --dry-run