Python: проблемы с потоковой передачей в Twitter и Pycurl - PullRequest
2 голосов
/ 27 ноября 2010

У меня проблемы с pycurl в связи с потоком фильтра Twitter Streaming API.То, что происходит, когда я запускаю приведенный ниже код, кажется, препятствует выполнению вызова.Я знаю это, потому что я разместил операторы печати до и после вызова выполнения.Я использую Python 2.6.1 и нахожусь на Mac, если это имеет значение.

#!/usr/bin/python
print "Content-type: text/html"
print
import pycurl, json, urllib

STREAM_URL = "http://stream.twitter.com/1/statuses/filter.json?follow=1&count=100"
USER = "user"
PASS = "password"
print "<html><head></head><body>"


class Client:
    def __init__(self):
        self.buffer = ""
        self.conn = pycurl.Curl()
        self.conn.setopt(pycurl.POST,1)
        self.conn.setopt(pycurl.USERPWD, "%s:%s" % (USER,PASS))
        self.conn.setopt(pycurl.URL, STREAM_URL)
        self.conn.setopt(pycurl.WRITEFUNCTION, self.on_receive)

        try:
            self.conn.perform()
            self.conn.close()
        except BaseException:
            traceback.print_exc()

    def on_receive(self,data):
        self.buffer += data
        if data.endswith("\r\n") and self.buffer.strip():
            content = json.loads(self.buffer)
            self.buffer = ""
            print content
            if "text" in content:
                print u"{0[user][name]}: {0[text]}".format(content)

client = Client()

print "</body></html>"

Ответы [ 2 ]

2 голосов
/ 18 февраля 2011

Сначала попробуйте включить многословие, чтобы помочь отладке:

    self.conn.setopt(pycurl.VERBOSE ,1)

Похоже, вы не устанавливаете основной режим аутентификации:

    self.conn.setopt(pycurl.HTTPAUTH, pycurl.HTTPAUTH_BASIC)

Также в соответствии с документацией вам необходимо предоставить POST параметры API, а не передавать их в качестве параметра GET:

    data = dict( track='stack overflow' )
    self.conn.setopt(pycurl.POSTFIELDS,urlencode(data))
1 голос
/ 27 ноября 2010

Вы пытаетесь использовать обычную аутентификацию.

Базовая аутентификация отправляет учетные данные пользователя в заголовке HTTP-запроса.Это делает его простым в использовании, но небезопасным.OAuth - это предпочтительный метод аутентификации Twitter для продвижения вперед - приходите Август 2010, мы отключим Basic Auth от API .- Аутентификация, Twitter

...