Mac って何?それって美味しいの?

マイコンと呼ばれた時代から現在まで、使用記から何から何でも。

FacebookからWordPressへの引っ越し(遠回り編)

 

yummac.hatenablog.jp

 

2007年かな?旅行中知り合ったカナダ人の女の子から招待メールが来て、
Facebookに登録した。でも、ほとんど投稿せず、生存確認で
たまにサイトを開く程度でした。
そのため、Facebookも使い方がわからない状態で挑みます。

Facebookの投稿をWordPressにインポートする方法を探ってみる。
が、意外とない。海外サイトをググってみるがヒットしない。
とりあえずFacebookにユーザデータを出力する機能があるので
依頼主にお願いして出力してもらう。

JSONって何?とか思いながらも、何がどんな状態で出力されるか
知らないので、全部選択してもらう。
リクエストからダウンロード可能になるまで時間かかりそう。
翌日、確認するとダウンロードできたが、
圧縮(zip)ファイルで 約10G バイト…

投稿データらしきファイルを解凍してみる
your_posts_and_comments_in_groups.json 約13MB
your_posts_1.json 約27MB
と、なかなかボリューム感あり。8年くらい前からだそうだ。
ただ、大容量の理由は別で、約2万個の画像ファイルと動画ファイルでした。

JSONファイルをテキストエディタで開いてみる。
カラム X 行 形式のデータであればなんとかなるんだが、これは。
オンラインで変換できるサイトで試みるも、サイズが大きすぎてエラーになる。
CSVに変換できるツールJSONedit - JSON editorを発見!
でも、ファイルを開いてみると日本語文字化け。
デコード方法を探るが、何れも当てはまらず。
海外サイトで、Facebookからダウンロードしたデータのマルチバイト文字が文字化けする投稿が見つかるが、書かれているデコード方法でも駄目だった。
眺めているうちに、コードのパターンに気付く。

例)"月"
Facebookのコード:\u00e6\u009c\u0088
UTF-8:E69C88
パターン)
Facebookのコード:\u00xx\u00yy\u00zz
UTF-8:\uxxyyzz

"\u00"で始まる連続した3個のコードを"00"取り除いてくっつければUTF-8になる。

これが正解かはさておき、
デコードされないようエスケープシーケンスを別の文字に置換、
JSONeditツールでCSV作成、
MSAccessでインポート後、
自作関数でコード変換したら、うまくいきすぎて感動した。

デコード関数
(事前にJSONファイル中の"\u00"を"##00"に置換して、勝手にデコードされないようにしておきました。)

Public Function FacebookDecode(ByVal sWord As String) As String
  Dim d As Object
  Dim elm As Object
  
  '「##00」を「%」に置換、元々ある%を%25に置換する。"%"->"%25"
  sWord = Replace(sWord, "%", "%25")
  sWord = Replace(sWord, "##00", "%")
  
  '改行コードを"%0A"(LF)に置換0D,0A
  sWord = Replace(sWord, Chr(13) & Chr(10), "%0A")
  sWord = Replace(sWord, Chr(13), "%0A")
  sWord = Replace(sWord, Chr(10), "%0A")
  
  sWord = Replace(sWord, "\", "\\")
  sWord = Replace(sWord, "'", "\'")
  Set d = CreateObject("htmlfile")
  Set elm = d.createElement("span")
  elm.setAttribute "id", "result"
  d.appendChild elm
  d.parentWindow.execScript "document.getElementById('result').innerText = decodeURI('" & sWord & "');", "JScript"
  FacebookDecode = elm.innerText

End Function

そして、Accessでデータ構造やパターン解析に半月くらい費やし、
投稿データ抽出、編集、WordPressでインポート可能なXMLデータ作成、
WordPressでなんとか見れる形にした。

ただ、なんだかしっくりこない。

Facebookエクスポート>JSONツールでCSV化>Accessでデータ編集>Wordpressインポート
と遠回りしている感がある。いや、確実に遠回りだ。
他に方法はないか探り、Facebook for Developers の Graph API にたどり着く。
なんとなく、そういうものがあるのは気付いていたが
面倒そうなので見ないふりをしていたのだ。

Accessでいろいろやっている間、PHPWordPressプラグインやショートコードを作ることも覚えたので、ちょっと自信がでてきた。

よし、WordPressFacebookから投稿を直接移行するプラグインを作ってみよう!

 

yummac.hatenablog.jp