lisz-works

技術系だけど関係ないこと多い系ブログ

Twythonの検索結果をJSONファイルに出力→読込してみる

【スポンサーリンク】

Python ロゴ

前回Twythonを使った、OAuth認証、ツイート、検索についての記事を書きました。

www.lisz-works.com

今回は実施した検索結果を、JSONファイルに出力→読込を行う方法です。

検索結果をファイル出力して確認したい!とか
検索結果を保存したい!なんてときに有用使えそうです!

単純にJSONファイルの読み書きをしたい場合にも有用です!

検索と結果のJSONファイル出力

検索した結果を、整形した状態で出力します。
「UTF-8」で出力する為、単純に出力するより、若干コードが増えています。

整形と出力は、コチラを参考にしました。
JSONファイルのフォーマットを整えてDumpする

# -*- coding: utf-8 -*-
from twython import Twython, TwythonError
import json    # JSON解析に必要
import codecs  # UTF-8でファイルIOするために必要

APP_KEY = "app key"
APP_SECRET = "app secret"

# OAuth2(AccessTokenの取得)
twitter = Twython(APP_KEY, APP_SECRET, oauth_version = 2)
ACCESS_TOKEN = twitter.obtain_access_token()
twitter = Twython(APP_KEY, access_token=ACCESS_TOKEN)
# 検索
result = twitter.search(q="python", result_type="popular")

# ファイルオープン
f = codecs.open("result.json", "w", 'utf-8')
# JSONをダンプ(ファイル出力)
# arg3~のオプションを入れることで、整形した状態で出力可能
json.dump(result, f, ensure_ascii=False, indent=4, sort_keys=True, separators=(',', ': '))

ここでは前回の記事同様、OAuth2で検索していますが、OAuth1で実施してもOKです。

出力したファイルはコチラ

JSONファイルを読み込む

出力済みのJSONファイルを読み込みます。
「UTF-8」で出力したので、こちらも「UTF-8」で読み込みを行います。

# -*- coding: utf-8 -*-
import json
import codecs

# jsonのロード
f = codecs.open("result.json", "r", 'utf-8')
data = json.load(f)

json.load()の結果は辞書型で返ってきます。

なので、JSONファイルのKeyを連想配列で指定してあげると、簡単に中身が取り出せます。

めっちゃ便利!

data['search_metadata']

出力

{'completed_in': 0.031,
 'count': 15,
 'max_id': 0,
 'max_id_str': '0',
 'query': 'python',
 'since_id': 0,
 'since_id_str': '0'}

関数化してみた

面倒なので関数化してみました。

# -*- coding: utf-8 -*-
import json    # JSON解析に必要
import codecs  # UTF-8でファイルIOするために必要

# JSONファイルへの出力
#
# 辞書型のデータを、UTF-8の整形済みJSONファイルとして出力します。
# param: fileName 出力ファイル名
# param: data 出力データ(辞書型)
def outputJson(fileName, data):
    # ファイルオープン
    f = codecs.open(fileName, "w", 'utf-8')
    # JSONをダンプ(ファイル出力)
    # arg3~のオプションを入れることで、整形した状態で出力可能
    json.dump(data, f, ensure_ascii=False, indent=4, sort_keys=True, separators=(',', ': '))

# JSONファイルの入力
# 
# UTF-8のJSONファイルを読み込み、辞書型のデータとして返します。
# param: fileName 入力ファイル名
# return: 入力データ(辞書型)
def inputJson(fileName):
    # jsonのロード
    f = codecs.open(fileName, "r", 'utf-8')
    data = json.load(f)
    
    return data

# 使用例
d = inputJson("result.json")  # 入力
outputJson("res2.json", d)    # 出力

あとがき

やり方がわかってしまえば、かなりシンプルに入出力ができます。

これがPythonのチカラか……

シンプルに実装できるうえ、操作しやすい形でデータが手に入るとか至れり尽くせりですね!

だんだんPythonがすきになってきた。