8
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

PythonとTwitterAPIでクローリング1〜簡易な検索機能

Last updated at Posted at 2019-12-05

#動機
 クローリングとAPIの扱いについて勉強するために、実際にTwitter用のクローリングツールを作ってみることにしました。

#環境
 今回開発を行う環境は以下の通りです。

 MacBook Air (Retina, 13-inch, 2018)
 プロセッサ 1.6 GHz Intel Core i5
 メモリ   8 GB 2133 MHz LPDDR3

#APIの導入手順
 APIを導入するにあたって、以下のような手順を行います。

  1. TwitterAPIキーの取得
  2. クローラーの実装

##1. TwitterAPIキーの取得
 まずこちらのサイトでTwitterAPIキーを手に入れます
 Twitter Developers
 こちらでAPIキーが欲しいアカウントでログインしたあとCreate an appをクリックしたあと承認を押します。
 その後色々聞かれますがこれらに適当に答えます。そうしたら以下の四つのAPIキーが手に入ります。

 Consumer Key
 Consumer Secret Key
 Access Token
 Access Secret Token

##2. クローラーの実装
 クローラーはモジュールとしても使えるように実装していきます
 まず以下のようなconfig.pyを作成します

config.py
Consumer_Key = "Comsumer Key"
Consumer_Secret_Key = "Consumer Secret Key"
Access_Token = "Access Token"
Access_Secret_Token = "Access Secret Token"

 次に__init__.pyという空のファイルを作成しておきます

__init__.py

 そしてこれらのファイルを使って、クローラーを実装していきます。
 実装するクローラーファイルの名前はtweet_butler.pyとします。これをconfig.pyファイルと同じ階層に作成して実装していきます。

###import

tweet_butler.py
from . import config
from requests_oauthlib import OAuth1Session
import json

 from . import configの部分は相対パスでimportするもので__init__.pyファイルがないとImport errorが起こってしまうので注意してください。
 config.pyファイルはAPIキーを使用するために、requests_oauthlibライブラリはOAuth認証をするために必要となります。さらにAPIのレスポンスはjsonファイルで帰ってくるのでjsonライブラリもインポートしておきます。
次にAPIを用いて検索を行います。

tweet_butler.py
CK = config.Consumer_Key
CS = config.Consumer_Secret_Key
AT = config.Access_Token
AS = config.Access_Secret_Token

twitter = OAuth1Session(CK, CS, AT, AS)
params = { q : "検索ワード" }
res = twitter.get(url, params = params)

これでAPIからのレスポンスが得られます。
その後ステータスコードが200であることを確かめてから本文をjson形式で手に入れます。

if res.status_code == 200:
    search_result = json.loads(res.text)

これらの動作をクラスとして行うようにしたいので、新しくButlerクラスを用意します。

###Butlerクラス

tweet_butler.py
class Butler:
    def __init__(self,setting = config):
        self.api = OAuth1Session(setting.Consumer_Key, setting.Consumer_Secret_Key, setting.Access_Token, setting.Access_Secret_Token)
        self.search_url = "https://api.twitter.com/1.1/search/tweets.json"

    def search(self,word,count=10):
        params = {"q":word,"count":count}
        res = self.api.get(self.search_url, params = params)
        if res.status_code == 200:
            search_results = json.loads(res.text)
        tweets = [Tweet(result) for result in search_results["statuses"]]
        return tweets

検索結果を受け取る際に、tweet(result)というコードがありますが、これはtweetを辞書形式で扱うのは面倒なのでtweetのクラスを別に作ってそこに辞書型の配列を渡しています。

###Tweetクラス

tweet_butler.py
class Tweet:
    def __init__(self,tweet):
        self.dict = tweet
        self.tweet_id = tweet["id"]
        self.user_id = tweet["user"]["id"]
        self.user_name = tweet["user"]["screen_name"]
        self.text = tweet["text"]
        self.created_at = tweet["created_at"]
        self.favorite_count = tweet["favorite_count"]
        self.hashtags = tweet["entities"]["hashtags"]
        self.symbols = tweet["entities"]["symbols"]
        self.mention = tweet["entities"]["user_mentions"]
    
    def get_text(self):
        return self.text

今の時点では、tweetからは本文のみしか必要ないのでtweetクラスは簡単に作っています。これでbutlerから受け取ったtweetのリストに対して、get_textを行えば本文がそれぞれ手に入ります。

#続く
 次はBatlerにuserのプロフィールを検索する機能をつけたり、userのクラスを作ってみたりしたいと思います。

#参考
TwitterAPIを用いたクローラー作成
twitter developer

8
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?