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でいろいろやっている間、PHPでWordPressのプラグインやショートコードを作ることも覚えたので、ちょっと自信がでてきた。
よし、WordPressでFacebookから投稿を直接移行するプラグインを作ってみよう!