IMUZA.com

Xserver<<WordPress(ConoHa)<<はてなブログ

ホーム / WebTips / はてなブログのタイトルにふりがなを振り、php 配列に格納する

はてなブログのタイトルにふりがなを振り、php 配列に格納する

2016/02/19 WebTips, はてなブログ

Yahoo! API を使って「漢字仮名交じり文」を「ひらがな」に変換するの続きです。

はてなブログの記事は、ダッシュボード > 設定 > 詳細設定 > エクスポート で MT形式のテキストファイルに書き出せます。これは一度エクスポートするとそのデータが保存されて、エクスポートしなおすまでそのままなんですね。

ただ、作成日時がそのページを開いた日になるのですが、これはどういうことでしょう?

それはともかく作業を続けましょう。

  • はてなブログのテキスト出力
  • 各記事のタイトル他をふりがな付きで配列に格納する

はてなブログのテキスト出力

MT形式は次のような書式で出力されます。

  • BASENAME は ブログurl+’/entry/’+BASENAME という形式でページの url になります
  • ‘——–‘ が記事の区切り文字です
AUTHOR:
CONVERT BREAKS:
IMAGE:
----- 
<p></p>
----- 


<p></p>
----- 
--------

各記事のタイトル他をふりがな付きで配列に格納する

次の個別の特殊ケースがありますので、if 文で振り分けています。

  • カテゴリーが「映画」「DVD」のみ抽出
  • カテゴリーが「映画」でも、タイトルに「No.」を含むものは除く
  • 下書きは除く

なお、一回こっきりのコードですのでチェックやエラー処理は省略しています。

<?php
$file = fopen('エクスポートしたテキストファイル', 'r');
$api = 'http://jlp.yahooapis.jp/FuriganaService/V1/furigana';
$appid = '取得したアプリケーション ID';
$movies = array();
$movie = array();
$category = array();
// Subject、改行削除のためのパターン
$patterns1 = array('/TITLE: /', '/\r\n/', '/\r/', '/\n/');
$patterns2 = array('/BASENAME: /', '/\r\n/', '/\r/', '/\n/');
while ($line = fgets($file)) {
if (strpos($line, 'TITLE:') !== FALSE) $title = $line;
elseif (strpos($line, 'BASENAME:') !== FALSE) $url = $line;
elseif (strpos($line, 'STATUS:') !== FALSE) $status = $line;
elseif (strpos($line, 'CATEGORY:') !== FALSE) $category[] = $line;
elseif (strpos($line, '--------') !== FALSE) {
// 一記事の終わりに来たら
if (strpos($title, 'No.') === FALSE && strpos($status, 'Publish') !== FALSE && (int)preg_grep('/映画|DVD/', $category) !== 0) {
$title = preg_replace($patterns1, '', $title);
// Yahoo! API へ「ルビ振り」のリクエスト
$params = array( 'sentence' => $title );
$ch = curl_init($api.'?'.http_build_query($params));
curl_setopt_array($ch, array(
CURLOPT_RETURNTRANSFER => true,
CURLOPT_USERAGENT      => "Yahoo AppID: $appid"
));
$result = curl_exec($ch);
curl_close($ch);
// 戻り値を解析しルビを文章に戻す
$xml = simplexml_load_string($result);
$ruby = '';
foreach ($xml->Result->WordList as $WordList) {
foreach ($WordList->Word as $Word) {
if (isset($Word->Furigana)) {
$ruby .= (string)$Word->Furigana;
} else {
$ruby .= (string)$Word->Surface;
}
}
}
// 配列に格納する
$movie['title'] = $title;
$movie['ruby'] = $ruby;
$movie['url'] = 'ブログurl/entry/' . preg_replace($patterns2, '', $url);
$movies[] = $movie;
}
$category = array();
}
}
// 一旦、配列をテキストファイルに保存する
file_put_contents('movies.txt', serialize($movies));

出力

array(448) {
[0]=>
array(3) {
["title"]=>
string(19) "俳優 亀岡拓次"
["ruby"]=>
string(34) "はいゆう かめおかたくじ"
["url"]=>
string(54) "http://ausnichts.hatenablog.jp/entry/2016/02/08/204644"
}
[1]=>
array(3) {
["title"]=>
string(12) "最愛の子"
["ruby"]=>
string(18) "さいあいのこ"
["url"]=>
string(54) "http://ausnichts.hatenablog.jp/entry/2016/02/04/174715"
}
・
・
・

結果は問題ないようです。448記事ありました。

一旦ファイルに書き出しているのは、次の五十音順に並べ替えたりするコードが出来ておらす、何度も Yahoo! API を呼び出すのを避けるためだけです。

ということで、次は五十音ソートと html への書き出しです。

はてなブログの記事の五十音順タイトル一覧を作るに続く。

Yahoo! API を使って「漢字仮名交じり文」を「ひらがな」に変換する
はてなブログの記事の五十音順タイトル一覧を作る
Twitter
Facebook
ブックマーク
LINEで送る

最初のサイドバー

最新記事

2023/02/1

WordPress:期間指定で人気記事を表示(プラグインなし)

2023/01/26

WordPress:メニューのid,classを整理カスタマイズ

2023/01/19

WordPress:JSON-LD構造化データをプラグインなしで出力

2023/01/11

WordPress:OGPタグをプラグインなしで挿入する

2022/12/27

WordPress:canonicalタグをプラグインなしで制御する

最新記事を一覧で見る

よく読まれている記事

よく読まれている記事を一覧で見る

カテゴリー

  • はてなブログ214
  • WebTips108
  • javascript98
  • Joomla!88
  • Windows68
  • CSS63
  • Wordpress60
  • Joomla!更新53
  • Linux49
  • はてなテーマ45
  • Plamo33
  • Google32
  • はてなプラグイン25
  • php22
  • Node.js18
  • Ubuntu16
  • SASS16
  • laravel415
  • Chrome11
  • cms-style10
  • iPhone9
  • genesis6
  • ConoHa WING6
  • Git入門6
  • Python5
  • Android5
  • スマートフォン4
  • PC全般4
  • 静的サイトジェネレーター3
  • Firefox3
  • SSD3
  • Facebook3
  • Blankslate3
  • Docker3
  • Mactype2
  • GitHub2
  • youtube1
  • rails入門1
  • Twitter1
  • はてなブクマ1
  • 映画1
  • Xserver1

Footer

My Web Sites

  • @半径とことこ60分
  • そんなには褒めないよ。映画評
  • IMUZA.com
  • GitHub

Related Sites

  • WordPress公式
  • WordPress関数リファレンス
  • PHPマニュアル

Contact Us

  • お問い合わせフォーム
  • Twitter
  • Facebook
  • Feedly

Copyright © 2023 · IMUZA.com