電子竹林:Blog2

Tech関係、はてなダイアリーから移転済み...

Facebookのエクスポートの変換

概要

  • Facebookの自分の書き込みをエクスポートして、これをPythonで変換してBearに入れて検索できるようにしようとした…が、複雑すぎて断念

    詳細

  • 「Twitterのエクスポートの変換」と同じでFacebookの自分の書き込みも日記がわりなので、前のに続いて、Bearで検索出来るようにしてみる
  • Facebookのデータをダウンロードするには、Web版の画面で、右上のプルダウンから設定/あなたのfacebook情報/個人データをダウンロード(JSONフォーマット)、ここで投稿、コメント、メッセージ、イベント、位置情報、だけチェックしてファイルを作成、しばらく(數十分?)してダウンロードが可能になる。
  • ダウンロードした中身のREADME.txtに書いてあるが余計なデータが多い。自分の書き込みのファイルは「your_posts_1.json」。
  • 最初に、次のようなこの中の文字コードが謎だった。
       "post":  "\u00e6\u00b8\u00a5\u00e7\u00be\u008e...
  • 色々と自力でやってみたが分からず、ググってpython - Facebook JSON badly encoded - Stack Overflowに答えを見つけた。latin1, utf-8の二回encodeすればいい。上の例なら"\u00e6\u00b8\u00a5\u00e7\u00be\u008e...".encode('latin1').decode('utf8') で戻せる。なぜこうなっているのかは謎。分かって見れば簡単。
  • 文字コードは解決したが、JSONの全体の構造がわかりにくい。近況アップデート、チェックイン、いいねをする、イベントを作る、写真を投稿する、などなど全部が一緒に入り、フォーマットが微妙に違うのでしらみつぶしにするのが面倒で断念。
  • で、JSONじゃなくてHTMLフォーマットでFacebookからダウンロードしてやりなおしてみる。これを次のようにすれば、HTMLからタグを取って一気にテキストまで得られる。
f = open('your_posts_1.html')
html = f.read()
f.close()
soup = BeautifulSoup(html, "html.parser")
[s.decompose() for s in soup(["script", "style"])] # remove tag
tx = soup.get_text()
  • しかし、結局は近況アップデート、チェックイン、いいねをする、イベントを作る、写真を投稿する、などの違いはタイトルなどから判断しないといけないので同じ事になる。
  • あまりに不毛なので、とりあえず断念した…