40789


環境： Ubuntu 16.04.3, python 2.7.14

<https://qiita.com/kenmatsu4/items/23768cbe32fe381d54a2>  
twitterのタイムラインから単語を収集し解析するプログラムの勉強のために、上記ページのプログラムで、Twitterのタイムラインを収集するプログラムを動かしたいです。

functions.pyで以下のようにエラーが表示されます。

[code]

    $ python functions.py
    
    Traceback (most recent call last):
      File "functions.py", line 31, in <module>
        print(getTweetData())
    TypeError: getTweetData() takes exactly 3 arguments (0 given)
    
[/code]

自分の手元にコピーし、編集したソースコードは以下のようになっています。

functions.py

[code]

    from initialize import initialize
    def getTweetData(search_word, max_id, since_id):
        global twitter
        url = 'https://api.twitter.com/1.1/search/tweets.json'
        params = {'q': 'search_word',
                  'count':'100',
        }
        # max_idの指定があれば設定する
        if max_id != -1:
            params['max_id'] = max_id
        # since_idの指定があれば設定する
        if since_id != -1:
            params['since_id'] = since_id
    
        req = twitter.get(url, params = params)   # Tweetデータの取得
    
        # 取得したデータの分解
        if req.status_code == 200: # 成功した場合
            timeline = json.loads(req.text)
            metadata = timeline['search_metadata']
            statuses = timeline['statuses']
            limit = req.headers['x-rate-limit-remaining'] if 'x-rate-limit-remaining' in req.headers else 0
            reset = req.headers['x-rate-limit-reset'] if 'x-rate-limit-reset' in req.headers else 0
            return {"result":True, "metadata":metadata, "statuses":statuses, "limit":limit, "reset_time":datetime.datetime.fromtimestamp(float(reset)), "reset_time_unix":reset}
        else: # 失敗した場合
            print ("Error: %d" % req.status_code)
            return{"result":False, "status_code":req.status_code}
    
    print(getTweetData())
    
    def obj_nullcheck(string): # Y if X else Z
        return False if string is None else True
    
    def is_exist_id(id_str):
        return tweetdata.find({'id':long(id_str)},{'id':1}).count() > 0
    
[/code]

initialize.py

[code]

    from requests_oauthlib import OAuth1Session
    from requests.exceptions import ConnectionError, ReadTimeout, SSLError
    import json, datetime, time, pytz, re, sys, traceback, unicodedata, pymongo
    from pymongo import MongoClient
    import numpy as np
    from collections import defaultdict
    from bson.objectid import ObjectId
    import MeCab as mc
    from logging import getLogger, DEBUG
    from logging.handlers import SysLogHandler
    
    KEYS = {
            'consumer_key':'*****************',
            'consumer_secret':'*****************',
            'access_token':'*****************',
            'access_secret':'*****************',
           }
    
    twitter = None
    connect = None
    db      = None
    tweetdata = None
    meta    = None
    posi_nega_dict = None
    
    def initialize(): # twitter接続情報や、mongoDBへの接続処理等initial処理実行
        global twitter, twitter, connect, db, tweetdata, meta
        twitter = OAuth1Session(KEYS['consumer_key'],KEYS['consumer_secret'],
                                KEYS['access_token'],KEYS['access_secret'])
    
        connect = MongoClient('localhost', 27017)
        db = connect.kenko
        tweetdata = db.tweetdata
        meta = db.metadata
        posi_nega_dict = db.posinegadict
    
    initialize()
    print(initialize())
    
[/code]

* * *

自分で調べて実行したことは  
1.global変数twitterの中身が定義されていないので twitter = で  
req = twitter.get(url, params = params) # Tweetデータの取得までを {}で囲む  
→ 結果

[code]

    File "functions.py", line 7
    url = 'https://api.twitter.com/1.1/search/tweets.json'
        ^
    
[/code]

SyntaxError: invalid syntax

色々試すが無関係そうだと判断。

  2. initialize.py内のtwitterのapiキーが間違っている  
→ キーを確認。問題なし。

  3. 0 givenとエラーに表示されているので、 search_word, max_id, since_id が機能していないのではと考えたがその先どうすれば直るのかが不明

お手数ですが、アドバイスよろしくお願いします。


CC BY-SA 3.0
2018-01-07T02:30:15.173
40786
2018-01-07T05:23:45.190
2018-01-07T05:07:24.133
3060
26905
question
python ubuntu api twitter
Twitterのタイムライン収集を行うPythonの関数の動かし方


エラーメッセージに表示されている通り、`getTweetDate()`を呼び出す際は引数を3つ渡す必要があるのにプログラムでは **引数なし**
で呼び出しているため、エラーになっているのだと思います。

エラーメッセージ

[code]

    TypeError: getTweetData() takes exactly 3 arguments (0 given)
    
[/code]

定義部分

[code]

    def getTweetData(search_word, max_id, since_id):
    
[/code]

呼び出し部分

[code]

    print(getTweetData())
    
[/code]

参照先URL(Qiita)ソースコードでの呼び出し部分

[code]

    res = getTweetData(u'スタバ', max_id=mid, since_id=sid)
    
[/code]


CC BY-SA 3.0
2018-01-07T05:13:46.433
40789
2018-01-07T05:23:45.190
2018-01-07T05:23:45.190
3060
3060
40786
answer