2
0

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 5 years have passed since last update.

Webからデータを拾う(1)

Posted at

twitterからデータを拾う

以下,Python3を使って,twitterからデータを取得する方法を説明します.

準備

まず下記ページを参考に,自分のアプリケーション用のトークンやキーを手に入れます.
https://syncer.jp/Web/API/Twitter/REST_API/
config.pyというファイルに設定します.これは間違ってもgitとかに上げたりして公開してはダメですよ.

CONSUMER_KEY = "XXXXXXXXXXXX"
CONSUMER_SECRET = "YYYYYYYYYYYYYYY"
ACCESS_TOKEN = "ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ"
ACCESS_TOKEN_SECRET = "____________________________"

twitterにはrequests-oauthlibでアクセスします.
requests-oauthlibを使ったことがなければ,インストールしておきましょう.

sudo pip3 install requests requests-oauthlib

twitterにアクセス

次にconfig.pyとその他必要なライブラリをインポートするソースコードを書きます.

import json, sys, config, re
from requests_oauthlib import OAuth1Session

CK = config.CONSUMER_KEY
CS = config.CONSUMER_SECRET
AT = config.ACCESS_TOKEN
ATS = config.ACCESS_TOKEN_SECRET
tw = OAuth1Session(CK, CS, AT, ATS)

baseurl = "https://api.twitter.com/1.1"

指定したユーザのツイート群を取得するコードです.baseurlに,APIのURLを付加します.

tweet_url = baseurl + "/search/tweets.json"

def getTweets(name):
        res = tw.get(tweet_url, params = { 'q': "from:" + name })
        tweets = json.loads(res.text)
        return tweets

指定したユーザのお気に入りを取得するコードです.同様に,baseurlに,APIのURLを付加します.

favorites_url = baseurl + "/favorites/list.json"

def getFavorites(name):
        res = tw.get(favorites_url, params = { 'screen_name': name })
        tweets = json.loads(res.text)
        return tweets

ツイートの中にURLがある時は,短縮されているので復号する必要があります.
URLにアクセスすると,301が返ってくるので,locationヘッダの値を返却します.

def expandURL(url):
        conn = http.client.HTTPSConnection("t.co")
        conn.rquest("GET", url)
        res = conn.getresponse()
        if res.status == 301:
                hdr = res.getheader("location")
                return hdr
        else:
                return None

さてこのツイート群ですが,一個一個の取得結果が妙に長いです.
ツイート主のアカウント情報まるまるや,場合によってはツイート時の緯度経度まで含みます.
多分 text と created_at くらいで10中8,9は足りるのではないでしょうか.

{'created_at': 'Mon Sep 24 11:08:48 +0000 2018',
 'id': 1044181851554734080, 'id_str': '1044181851554734080',
 'text': '何が起こっているのか簡単に書くと,アティヤという超有名な数学者(でももう89歳のおじいちゃん)が微細構造定数(要するに電磁相互作用の無次元の強さ)の値を計算で出して,そのついでにリーマン予想を証明しちゃったというので騒ぎになっている(老人の妄想?)', 
 'truncated': False, 
 'entities': {'hashtags': [], 'symbols': [], 'user_mentions': [], 'urls': []}, 
 'source': '<a href="http://twmode.sf.net/" rel="nofollow">twmode</a>', 
 'in_reply_to_status_id': None, 'in_reply_to_status_id_str': None,
 'in_reply_to_user_id': None, 'in_reply_to_user_id_str': None, 
 'in_reply_to_screen_name': None, 'user': {'id': 28894757, 'id_str': '28894757', 
 'name': 'Haruhiko Okumura', 'screen_name': 'h_okumura', 'location': 'Japan', 
 'description': 'https://t.co/714NuCih81 転載はご自由に(CC BY)', 'url': None, 
 'entities': {'description': {'urls': [{'url': 'https://t.co/714NuCih81', 
 'expanded_url': 'http://oku.edu.mie-u.ac.jp/~okumura/',
 'display_url': 'oku.edu.mie-u.ac.jp/~okumura/', 'indices': [0, 23]}]}},
 'protected': False, 'followers_count': 22653, 'friends_count': 493, 
 'listed_count': 1687, 'created_at': 'Sat Apr 04 23:33:18 +0000 2009', 
 'favourites_count': 3075, 'utc_offset': None, 'time_zone': None,
 'geo_enabled': True, 'verified': False, 'statuses_count': 70275, 'lang': 'ja', 
 'contributors_enabled': False, 'is_translator': False,
 'is_translation_enabled': False, 'profile_background_color': 'C0DEED', 
 'profile_background_image_url': http://abs.twimg.com/images/themes/theme1/bg.png',
 'profile_background_image_url_https': 'https://abs.twimg.com/images/themes/theme1/bg.png',
 'profile_background_tile': False,
 'profile_image_url': 'http://pbs.twimg.com/profile_images/3621816458/b159d4051d6a227bcaf7f265e1d92da4_normal.jpeg',
 'profile_image_url_https': 
 'https://pbs.twimg.com/profile_images/3621816458/b159d4051d6a227bcaf7f265e1d92da4_normal.jpeg', 'profile_link_color': '1DA1F2',
 'profile_sidebar_border_color': 'C0DEED', 'profile_sidebar_fill_color': 'DDEEF6', 
 'profile_text_color': '333333',
 'profile_use_background_image': True, 'has_extended_profile': False, 
 'default_profile': True, 'default_profile_image': False, 'following': True, 
 'follow_request_sent': False, 'notifications': False, 'translator_type': 'none'}, 
 'geo': None, 'coordinates': None, 'place': None, 'contributors': None, 
 'is_quote_status': False, 'retweet_count': 1243, 'favorite_count': 1717, 
 'favorited': True, 'retweeted': False, 'lang': 'ja'}

あとはやりたいことをAPIを見て探してください.
https://developer.twitter.com/en.html

いくつか注意があります.

  • 検索できるツイート件数には限りがあります.課金で増やせるはずです.
  • ユーザー間の関係(フォローしているとかされているとか)は,少しずつしか探せません.課金しても増やせません.
2
0
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
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?