はてなダイアリーには日記をつけた日の合計を表示する機能はあっても、総記事数を表示する機能はない。
だから、総記事数を取得するにはイレギュラーな方法を使う必要がある。
archiveページ
はてなダイアリーのアーカイブページでは、一ページに50日分の記事へのリンクが表示される。
これは日付単位の表示で、一日に複数回更新する人の場合は1ページに51記事以上表示されてしまう。
だから、単純にarchiveが10ページだからこのブログには500の記事がある、というようなカウント方法は使えない。
一つ一つの記事数を数え上げる必要がある。
ちなみに機械的に数える場合はソース内に存在するarchive-sectionという文字列をカウントする方法を使うと楽だ。
はてなダイアリーのhtml構造を見ると、アーカイブページ内の個別記事へのリンクはarchive-sectionというクラスを使っている。
archive-sectionの出現回数は、ページ内の個別記事数とほぼ等しい。
ただし、はてなスターのjavascriptが読み込まれる環境では、ヘッダのスクリプト内にarchive-sectionが一回登場登場するのでマイナス1すること。
(後でよく考えたら [ archive-section]というように先頭に半角スペースを含む文字列で検索すればこの処理は必要がなくなる)
例 Google Chromeの場合は検索文字列のヒット数がデフォルトで表示される。
右クリック→ソースの確認→検索(CTRL+F)で、archive-section を検索し、その数字をマイナス1すればページ内の個別記事数が求められる。
これを、archive内の全ページで行い、合計すれば現在公開中の記事の総数を計算することができる。
↓10分で作った例外処理とか華麗にサボったphpスクリプト。これは公開されているサーバーでは実行しないほうが良い。
<?php $test= get_total_posts_number("USER-ID"); function get_total_posts_number($user_id){ /*例外処理やセキュリティ対策は大幅にサボります。ローカルサーバー以外では使用しないでください*/ $loop_counter=0; //ループ回数 $sum_posts=0; //合計記事数 $count_posts=-1; //ページ内のブログ記事数 while ($count_posts !==0){ //はてなダイアリーのarchiveは1ページに50日分の記事タイトルが表示されます。 $archive_page_number=$loop_counter*50; //archiveのurlの形式は http://d.hatena.ne.jp/[USER_ID]/archive?word=&of=[最新から何日目の記事から50件表示するかを数字指定] となっています。 $url="http://d.hatena.ne.jp/".$user_id."/archive?word=&of=".$archive_page_number; //archive ページの内容をphpで取得します。 $archive=file_get_contents($url); //本当はここで存在しないユーザーIDに対する対応等が必要 /* substr_countは指定した文字列が出現する回数を取得する関数です。 はてなダイアリーのarchiveページでは 個別記事への記事へのリンクには「archive-section」というクラスを使用しています。 これの出現回数をカウントするとページ内に含まれる個別記事数をカウントできます。 検索するときには「archive-section」という文字列の前に半角スペースを入れてください。 半角スペースを含んだキーワードで検索すれば、headerのjavascript内にある「"archive-section"」や、ユーザーCSS内の「.archive-section」を除外できます */ $count_posts=substr_count($archive ," archive-section"); //1ページ分の処理が終わったので記事数を合計します。 $sum_posts+=$count_posts; //次の五十日分を取得するためにカウンターを一つ増やします $loop_counter++; } /* そのダイアリーの全記事を取得し終わると、それ以降はcount_postsの数字がゼロになります。そうするとループは終了。 最後に総記事数を出力します*/ echo $sum_posts; }