IMUZA.com

<<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で送る

最初のサイドバー

最新記事

2022/07/29

WordPressでiframeが表示されない(解決)

2022/07/14

WordPressのデータベースを入れ替える

2022/07/7

WordPress:テーマをゼロから作ってみる(3)

2022/06/26

WordPress:Aレコード変更でウェブだけ他サーバへ移転

2022/06/13

WordPress Popular Posts 他のプラグインに変えたほうがいいかも

最新記事を一覧で見る

よく読まれている記事

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

カテゴリー

  • はてなブログ212
  • WebTips108
  • javascript95
  • Joomla!88
  • Windows68
  • CSS62
  • Joomla!更新53
  • Linux49
  • はてなテーマ45
  • Wordpress37
  • Plamo33
  • Google32
  • はてなプラグイン25
  • php19
  • Node.js18
  • SASS16
  • Ubuntu16
  • laravel415
  • Chrome10
  • cms-style10
  • iPhone9
  • genesis6
  • Git入門6
  • ConoHa WING5
  • Python4
  • Android4
  • SSD3
  • Docker3
  • スマートフォン3
  • Facebook3
  • Firefox3
  • 静的サイトジェネレーター3
  • Blankslate3
  • Mactype2
  • GitHub2
  • rails入門1
  • はてなブクマ1
  • Twitter1
  • 映画1
  • youtube1

Footer

My Web Sites

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

Another Sites

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

Contact Us

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

Copyright © 2022 · IMUZA.com