如何通过代理使用tweepy流媒体API?

0 投票
2 回答
1936 浏览
提问于 2025-04-17 21:49

我知道有一个补丁可以让REST API通过代理使用,而且对我来说是有效的。但是,Streaming API使用的是HTTP连接,而urllib和urllib2(据我所知)无法模拟这种连接。有没有什么解决办法呢?

我尝试过使用带端口的代理,但没有成功。在streaming.py文件的第153行。

    if self.scheme == "http":
                conn = httplib.HTTPConnection(self.api.proxy_host,self.api.proxy_port, timeout=self.timeout)
            else:
                conn = httplib.HTTPSConnection(self.api.proxy_host,self.api.proxy_port,timeout=self.timeout)
            self.auth.apply_auth(url, 'POST', self.headers, self.parameters)
            print conn.host
            conn.connect()
            conn.request('POST', self.scheme+'://'+self.host+self.url, self.body, headers=self.headers)
            resp = conn.getresponse()

而且,"self.scheme+'://'+self.host+ self.url"对应的链接是 - https://stream.twitter.com/1.1/statuses/filter.json?delimited=length

我收到的错误是 -

Traceback (most recent call last):
File "/usr/lib/python2.7/dist-packages/IPython/core/interactiveshell.py", line 2538,    in run_code
exec code_obj in self.user_global_ns, self.user_ns
File "<ipython-input-3-4798d330f7cd>", line 1, in <module>
execfile('main.py')
File "main.py", line 130, in <module>
streamer.filter(track = ['AAP'])
File "/usr/local/lib/python2.7/dist-packages/tweepy/streaming.py", line 305, in filter
self._start(async)
File "/usr/local/lib/python2.7/dist-packages/tweepy/streaming.py", line 242, in _start
self._run()
File "/usr/local/lib/python2.7/dist-packages/tweepy/streaming.py", line 159, in _run
conn.connect()
File "/usr/lib/python2.7/httplib.py", line 1161, in connect
self.sock = ssl.wrap_socket(sock, self.key_file, self.cert_file)
File "/usr/lib/python2.7/ssl.py", line 381, in wrap_socket
ciphers=ciphers)
File "/usr/lib/python2.7/ssl.py", line 143, in __init__
self.do_handshake()
  File "/usr/lib/python2.7/ssl.py", line 305, in do_handshake
    self._sslobj.do_handshake()
    SSLError: [Errno 1] _ssl.c:504: error:140770FC:SSL      routines:SSL23_GET_SERVER_HELLO:unknown protocol

2 个回答

0

Tweepy 现在不支持使用代理。不过,接下来几天应该会增加对代理的支持。我会在这个回答里更新更多信息。

0

我终于找到一个GitHub上的补丁,可以通过代理来启用流式API。效果很好!

https://github.com/shogo82148/tweepy/blob/64c6266018920e0e36c6d8d1600adb6caa0840de/tweepy/streaming.py

撰写回答