Djangoを使ってツイートデータをガンガン保存していく

#Djangoでツイッターのツイートデータをガシガシ保存するやつ

前回作ったクライアントにツイートデータを保存する機能をくっつけてみました。やり方としては全然smartでは無いんですが、うまく動いたということで報告も兼ねまして。

前回＞http://qiita.com/Gen6/items/11fa5265053da95fcf0b


#準備

```mysite/settings.py
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
    }
}
```


#models.pyを書いていく

Djangoでずっと躓いていた（去年）箇所がこのmodels.pyとかいうものになります。実際何をやっているのかがよくわからなかったのですが、いわゆるデータベースのテーブルを定義しているようなものですね。

```myapp/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の管理画面からも実際に動いているかを確認したかったのでコチラも書いていきます。


```myapp/admin.py
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を編集する


```myapp/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))

```

くっそ汚いコードでスイマセンが、これで完了。

![スクリーンショット-2016-10-25-17.17.jpg](https://qiita-image-store.s3.amazonaws.com/0/71585/faf6c02c-b907-3a58-2d0a-1395590d2952.jpeg)

localhost/admin で確認できます。
すごく簡単ですね。実は。

検索APIの方を使えば検索結果をものの見事にデータベースへ取り込むことも可能です。