見出し画像

【115日目】DjangoでTweepyを動かしてみる

本日はDjangoでTweepyを簡単に動作させてみたいと思います。
本来はモデル等に取得したデータを蓄積させていきたいところですが、まずは動かせるかどうかの確認です。

簡単な動作確認なので、関数ベースで試していきたいと思います。

tweepyを使うための下準備などは以下の記事を参照してみてください。


全体の構成は以下です。

  • tweepy.pyを作成してtweepyを活用する関数「get_tweets」を定義

  • views.pyにビューを定義し、そこで「get_tweets」を呼び出す

  • いつも通りパスとテンプレートを設定


まずtweepyを使った関数を定義してみます。apiキー等もベタ打ちしてしまってますが、ここは後日.envファイルに入れられないか試すつもりです。

[tweepy.py]
 
import tweepy


def get_tweets(search, num):
    api_key       = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
    api_secret    = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
    access_key    = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
    access_secret = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxx"

    auth = tweepy.OAuth1UserHandler(api_key, api_secret)
    auth.set_access_token(access_key, access_secret)
    api = tweepy.API(auth)
    
    # API連携してツイート情報を収集
    tweets = tweepy.Cursor(api.search_30_day, label='test1', query=search,).items(num)

    # 取得した情報から必要なものをリストに格納
    tweets = list(tweets)
    tweet_data = []
    for tweet in tweets:
        tweet_data.append([tweet.id, tweet.user.id, tweet.user.name, tweet.text, tweet.favorite_count, tweet.retweet_count, tweet.created_at])

    return tweet_data


次に、この関数を呼び出すビューを定義します。
検索するキーワード等もここで渡します。

[views.py]
 
from django.shortcuts import render # 最初これだけ
from . import tweepy

# 一旦ツイートIDとテキストだけをダイレクトに表示してみる
def TwitterAnalysis(request):
    searchkey = "めざましテレビ"                # 検索ワード
    location  = "point_radius:[140 36 30km]"   # 東京の緯度経度を指定して半径30km以内でのツイートを取得
    search ="{0} {1}".format(searchkey, location)
    item_num = 3    # 一度に取得するツイート数(最大100)
    
    # get_tweets関数を呼び出す
    tweet_data = tweepy.get_tweets(search, item_num)

    # テンプレートにデータを渡す
    ctxt = {
        'tweet_id': tweet_data[0][0],
        'tweet_text': tweet_data[0][3],
    }

    return render(request, "tweepy_test/twitter_analysis.html", ctxt)


次はパスの設定です。関数ベースなのでas_view()は不要です。トップページにアクセスがあれば、TwitterAnalysisを返します。

[urls.py]
 
from django.urls import path
from. import views
 
ulrpatterns = [
    path("", views.TwitterAnalysis),
]


最後にテンプレートの設定です。ほんとに表示させるだけなので、ほぼ何も書いてません。

[twitter_analysis.html]
 
<p>{{ tweet_id }}</p>
<p>{{ tweet_text }}</p>


ブラウザを表示すると以下ようにツイート内容が表示されました(勝手に表示するの問題かもと思い、大部分を黒塗りしてます)。


うまくいくと結構感動するので、ぜひ試してみてください!

ここまでお読みいただきありがとうございました。



これまで修了したコース等

【YouTube_Django関係】
Pythonでウェブサービスを作ろう! 1
テンプレートをマスターしよう! 2
静的ファイルを配信しよう !3
本番公開しよう! 4
データベースと接続しよう! 5
ブログを作って学ぶモデル入門! 6
これが汎用ビューの力! 7
Djangoフォームを自由自在に操ろう! 8
djagoを最大限使って効率よくログインを作ろう! 9
ログイン完成!サインアップ & メール認証 10
データベースマイグレーション前編 15
データベースマイグレーション後編 16

【YouTube_Pandas関係】
3時間でマスター Pandas入門コース
Pandas20本ノック

【Paiza】
Aランクレベルアップメニュー 24/49問
データセット選択メニュー   12/17問
配列メニュー         64/64問
ループメニュー1      20/20問
ループメニュー2      12/20問
条件分岐メニュー       25/25問
二重ループメニュー      19/19問
配列活用メニュー       26/26問
文字列処理メニュー      30/30問
Bランクレベルアップメニュー 62/62問
Cランクレベルアップメニュー 30/30問
ランクB合格
ランクC合格
JavaScript体験篇       15/15講座
辞書(ディクショナリ)の基礎 8/8講座

【書籍/ブログ】
Django入門 | 初心者でも1時間でWebアプリ(Todoアプリ)を作成するコース
基礎からのMySQL
Web技術の基本
京大のPython教科書
Pythonデータベースプログラミング
Pythonエンジニアファーストブック

【Progate】
Python Ⅰ~Ⅴ
Python アプリ版 コースⅠ~Ⅴ
SQL Ⅰ~ Ⅳ
SQL アプリ版 コースⅢ
HTML&CSS 初級編

【環境構築】
Python, VSCode, MySQL(MAMP), Git / GitHub, HEROKU, anaconda, jupyter lab

この記事が気に入ったらサポートをしてみませんか?