#Djangoでツイッターのツイートデータをガシガシ保存するやつ
前回作ったクライアントにツイートデータを保存する機能をくっつけてみました。やり方としては全然smartでは無いんですが、うまく動いたということで報告も兼ねまして。
前回>http://qiita.com/Gen6/items/11fa5265053da95fcf0b
#準備
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
}
}
#models.pyを書いていく
Djangoでずっと躓いていた(去年)箇所がこのmodels.pyとかいうものになります。実際何をやっているのかがよくわからなかったのですが、いわゆるデータベースのテーブルを定義しているようなものですね。
from django.db import models
class Supermodel(models.Model):
user_name = models.CharField(max_length=140)
user_id = models.CharField(max_length=140)
user_img = models.CharField(max_length=140)
user_text = models.TextField(null=True)
user_created_at = models.CharField(max_length=140)
def __str__(self):
return self.user_name
ツイートデータから、ユーザー名・ID・サムネイル・テキスト本体・日時を保存したいのでこのような書き方になります。Supermodelとかいう名前はどうかとも思ったのですが、書いてしまったので仕方ないです。
#admin.pyを書いていく
Djangoの管理画面からも実際に動いているかを確認したかったのでコチラも書いていきます。
from django.contrib import admin
from myapp.models import Supermodel
class SupermodelAdmin(admin.ModelAdmin):
list_display = ('id','user_id','user_name','user_img','user_text','user_created_at')
admin.site.register(Supermodel,SupermodelAdmin)
#migrateする
$ python manage.py makemigrations myapp
$ python manage.py migrate
成功すれば次へ進めます。
正直ここはまだ完全にはよく分かってないので他の人の記述を読んでいただいたほうが良いかと思います。
#views.pyを編集する
from requests_oauthlib import OAuth1Session
import time, calendar
import datetime
import json
import re
import os
import requests
import sys, codecs
sys.stdout = codecs.getwriter('utf-8')(sys.stdout)
from django.http.response import HttpResponse
from django.shortcuts import render
from myapp.models import Supermodel
def index(request):
msg = request.GET.get('words')
C_KEY = '**************************'
C_SECRET = '**************************'
A_KEY = '**************************'
A_SECRET = '**************************'
url = 'https://api.twitter.com/1.1/statuses/update.json'
params = {'status': msg,'lang': 'ja'}
tw = OAuth1Session(C_KEY,C_SECRET,A_KEY,A_SECRET)
req = tw.post(url, params = params)
url = 'https://api.twitter.com/1.1/statuses/home_timeline.json'
params = {'count': 1}
req = tw.get(url, params = params)
if req.status_code == 200:
timeline = json.loads(req.text)
limit = req.headers['x-rate-limit-remaining']
for tweet in timeline:
Text = (tweet['text'])
User = (tweet['user']['screen_name'])
Name = (tweet['user']['name'])
Img = (tweet['user']['profile_image_url'])
Created_at = YmdHMS(tweet['created_at'])
data = Supermodel()
data.user_id = User
data.user_name = Name
data.user_img = Img
data.user_text = Text
data.user_created_at = Created_at
data.save()
Message = {
'Words': msg,
'timeline': timeline,
'API_limit': limit,
'Text': Text,
'User': User,
'Name': Name,
'Img': Img,
'Created_at': Created_at,
}
return render(request, 'index.html', Message)
else:
Error = {
'Error_message': 'API制限中',
}
return render(request, 'index.html', Error)
def YmdHMS(created_at):
time_utc = time.strptime(created_at, '%a %b %d %H:%M:%S +0000 %Y')
unix_time = calendar.timegm(time_utc)
time_local = time.localtime(unix_time)
return int(time.strftime('%Y%m%d%H%M%S', time_local))
くっそ汚いコードでスイマセンが、これで完了。
localhost/admin で確認できます。
すごく簡単ですね。実は。
検索APIの方を使えば検索結果をものの見事にデータベースへ取り込むことも可能です。