장고를 사용하여 트윗 데이터를 간간에 저장합니다.

장고에서 트위터의 트윗 데이터를 가시가시 저장하는 사람



이전에 만든 클라이언트에 트윗 데이터를 저장하는 기능을 붙여 보았습니다. 하는 방법으로서는 전혀 smart는 아닙니다만, 잘 움직였다고 하는 것으로 보고도 겸해서.

마지막> ぃ tp // 코 m / 겐 6 / ms / 11 5265053 95fcf0b

준비



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))


굉장히 더러운 코드로 수마센이 이것으로 완료.



localhost/admin에서 확인할 수 있습니다.
매우 간단합니다. 실은.

검색 API를 사용하면 검색 결과를 훌륭하게 데이터베이스에 가져올 수 있습니다.

좋은 웹페이지 즐겨찾기