Re: d3blogからのインポート
永らくありがとうございました › フォーラム › 使い方全般 › d3blogからのインポート › Re: d3blogからのインポート
エラーメッセージのPCDATA invalid Char 26
については不明ですが、
取得した、XMLファイルのエラー部分を修正したものを、送付させていただきました。
備考
ホームページ[井上雄彦 最後のマンガ展 重版 大阪]の文字をコピーして他のエディタに貼り付けてみると、
「大阪天保山にある」の「あ」と「る」の間に制御コード 0x1A
「玄関を入ると」の「を」と「入り」の間に制御コード 0x1A 0x7F 0x1A
が、挿入されています。
これがどうして入力されたのかは定かではありませんが、
ローカル環境のD3Blogで同様の文字を入力して再現性はありません。
D3Blogの編集画面で該当の箇所をBackspaceで消していくと、カーソル位置が変わらず、余計な文字が入っているのが解ると思います。
RSSインポート用のXMLファイルは以下のようにして取得しました
- D3BlogのRSSを全文出力に変更
XOOPS_TRUST_PATH/modules/d3blog/main/rss.phpの74行目あたり
<code>$item['description'] = xoops_convert_encoding($entry->pingExcerpt());</code>
を
<code>$item['description'] = xoops_convert_encoding($entry->renderContents(false,'e'));</code>
に変更
- 全記事を出力させるのに記事数制限を解除する
XOOPS_TRUST_PATH/modules/d3blog/main/rss.phpの59行目あたり
<code>$limit = intval($myModule->getConfig('max_rdf'));</code>
を
<code>$limit = 0;</code>
に変更
- インポート用に出力の並びを古い記事から最初に出現するようにする。
XOOPS_TRUST_PATH/modules/d3blog/main/rss.phpの66行目あたり
<code>$criteria->setOrder('DESC');</code>
を
<code>$criteria->setOrder('ASC');</code>
に変更
- カテゴリーと著者名を取得できるように変更
- rss.phpにカテゴリーと著者名出力を追加
XOOPS_TRUST_PATH/modules/d3blog/main/rss.phpの69行目あたり
<code>foreach($entries as $entry) {<br /> $item['title'] = xoops_convert_encoding(htmlspecialchars($entry->getVar('title', 'n'), ENT_QUOTES));<br /> $item['link'] = sprintf('%s/modules/%s/details.php?bid=%d', XOOPS_URL, $mydirname4show, $entry->bid());<br /> $item['guid'] = sprintf('%s/modules/%s/details.php?bid=%d', XOOPS_URL, $mydirname4show, $entry->bid());<br /> $item['pubdate'] = d3blog_rfc2822_date($entry->published());<br /> $item['description'] = xoops_convert_encoding($entry->renderContents(false,'e'));<br /> $items[] = $item;<br /> }</code>
を
<code>$all_categories =& $cat_handler->getAll();<br /> foreach($entries as $entry) {<br /> $category =& $all_categories[$entry->cid()];<br /> $arr =& $entry->getStructure();<br /> $item['title'] = xoops_convert_encoding(htmlspecialchars($entry->getVar('title', 'n'), ENT_QUOTES));<br /> $item['link'] = sprintf('%s/modules/%s/details.php?bid=%d', XOOPS_URL, $mydirname4show, $entry->bid());<br /> $item['guid'] = sprintf('%s/modules/%s/details.php?bid=%d', XOOPS_URL, $mydirname4show, $entry->bid());<br /> $item['pubdate'] = d3blog_rfc2822_date($entry->published());<br /> $item['description'] = xoops_convert_encoding($entry->renderContents(false,'e'));<br /> $item['category'] = xoops_convert_encoding($category->getVar('name'));<br /> $item['creator'] = xoops_convert_encoding($arr['blogger']['uname']);<br /> $items[] = $item;<br /> }</code>
に変更
- テンプレートd3blog_main_rss.xmlにカテゴリーと著者名出力を追加
テンプレートd3blog_main_rss.xmlを
<code><?xml version="1.0" encoding="UTF-8"?><br /> <rss version="2.0"><br /> <channel><br /> <title><{$feed.title}></title><br /> <link><{$feed.link}></link><br /> <description><{$feed.desc}></description><br /> <lastBuildDate><{$feed.lastbuild}></lastBuildDate><br /> <docs>http://backend.userland.com/rss/</docs><br /> <generator><{$feed.generator}></generator><br /> <category><{$feed.category}></category><br /> <language><{$feed.lang}></language><br /> <{if $logo_url != ""}><br /> <image><br /> <title><{$feed.title}></title><br /> <url><{$feed.logo_url}></url><br /> <link><{$feed.link}></link><br /> <width><{$feed.logo_width}></width><br /> <height><{$feed.logo_height}></height><br /> </image><br /> <{/if}><br /> <br /> <{foreach item=item from=$entries}><br /> <item><br /> <title><{$item.title}></title><br /> <link><{$item.link}></link><br /> <pubDate><{$item.pubdate}></pubDate><br /> <author><{$item.creator}></author><br /> <category><{$item.category}></category><br /> <description><{$item.description}></description><br /> </item><br /> <br /> <{/foreach}><br /> </channel><br /> </rss></code>
に修正
- rss.phpにカテゴリーと著者名出力を追加
RSSインポートを行う際に、
件数が多いと、処理に時間がかかり、
<code>Fatal error: Maximum execution time of ** seconds exceeded in ....</code>
が表示されることがあります。(**部はサーバーの設定により異なります)
この場合の対処方法としては、
- php.iniのmax_execution_timeを設定し直す(0を設定した場合無制限)
- インポート用のXMLファイルの<item> … </item>の部分をいくつかに分けて複数回に分けて処理する。
等をおこないインポートします。
なお、WordPressのRSSインポータは著者名まではインポートしていません。