2

何らかの理由で、このコードから 100 件のツイートしか取得できません。Twitter API によると、1500 になるはずです。

ここで間違っていることは何ですか?

具体的には、問題は次のとおりです。

twiturl = "http://search.twitter.com/search.json?q=" + urlinfo + "&rpp=99&page=15" + "&since_id=" + str(tweetdate)

for x in arg1:
                        urlinfo = x[2]
                        idnum = int(x[1])
                        name = x[0]
                        twiturl = "http://search.twitter.com/search.json?q=" + urlinfo + "&rpp=99&page=15" + "&since_id=" + str(tweetdate)
                        response = urllib2.urlopen(twiturl)
                        twitseek = simplejson.load(response)
                        twitsearch = twitseek['results']
                        tweets = [x['text'] for x in twitsearch]
                        tweetlist = [tweets, name]
                        namelist.append(tweetlist)

x[2] にあるはずの項目は、「I am」や「I am feel」などの単語またはフレーズを、URL に適したエンコードに変更したものです。

4

2 に答える 2

3

Twitter Search APIのドキュメントには次のように記載されています。

rpp (オプション): 1 ページあたりに返されるツイートの数 (最大 100)。

page (オプション): 返されるページ番号 (1 から開始)。最大で約 1500 件の結果 (rpp * ページに基づく)。

したがって、リクエストごとに最大 100 件のツイートに対して異なるページ番号を指定して、複数のリクエストを行う必要があります。

import urllib, json

twiturl = "http://search.twitter.com/search.json?q=%s&rpp=99&page=%d"

def getmanytweets(topic):
    'Return a list of upto 1500 tweets'
    results = []
    for page in range(1, 16):
        u = urllib.urlopen(twiturl % (topic, page))
        data = u.read()
        u.close()
        t = json.loads(data)
        results += t['results']
    return results

if __name__ == '__main__':
    import pprint
    pprint.pprint(getmanytweets('obama'))
于 2012-12-30T02:17:16.690 に答える
2

結果の 1 ページで返される結果の最大数は 100 です。すべての結果を取得するにnext_pageは、応答に含まれる URL を使用してそれらを「ページング」する必要があります (ドキュメントについては、こちらを参照してください)。next_page次に、応答をループして、引数がなくなるまで各応答の引数を呼び出します (すべての結果を収集したことを示します)。

import json
import urllib
import urllib2


# General query stub
url_stub = 'http://search.twitter.com/search.json'

# Parameters to pass
params = {
    'q': 'tennis',
    'rpp': 100,
    'result_type': 'mixed'
    }

# Variable to store our results
results = []

# Outside of our loop, we pull the first page of results
# The '?' is included in the 'next_page' parameter we receive
# later, so here we manually add it
resp = urllib2.urlopen('{0}?{1}'.format(url_stub, urllib.urlencode(params)))
contents = json.loads(resp.read())
results.extend(contents['results'])

# Now we loop until there is either no longer a 'next_page' variable
# or until we max out our number of results
while 'next_page' in contents:

  # Print some random information
  print 'Page {0}: {1} results'.format(
      contents['page'], len(contents['results']))

  # Capture the HTTPError that will appear once the results have maxed
  try:
    resp = urllib2.urlopen(url_stub + contents['next_page'])
  except urllib2.HTTPError:
    print 'No mas'
    break

  # Load our new contents
  contents = json.loads(resp.read())

  # Extend our results
  results.extend(contents['results'])

# Print out how many results we received
print len(results)

出力:

Page 1: 103 results
Page 2: 99 results
Page 3: 100 results
Page 4: 100 results
Page 5: 100 results
Page 6: 100 results
Page 7: 100 results
Page 8: 99 results
Page 9: 98 results
Page 10: 95 results
Page 11: 100 results
Page 12: 99 results
Page 13: 99 results
Page 14: 100 results
Page 15: 100 results
No mas
1492
于 2012-12-30T01:47:50.500 に答える