Обычный веб-интерфейс Twitter не использует базовую аутентификацию, поэтому запрос страниц из веб-интерфейса с использованием этого метода не будет работать.
Согласно документации API Twitter , вы можете получать личные сообщения, выбирая этот URL:
http://twitter.com/direct_messages.format
Формат может быть xml, json, rss или atom. Этот URL принимает базовую аутентификацию.
Кроме того, ваш код вообще не использует объект handler
, который он создает.
Вот рабочий пример, который исправляет обе проблемы. Получает личные сообщения в формате json:
import urllib2
username = "USERNAME"
password = "PASSWORD"
URL = "http://twitter.com/direct_messages.json"
password_mgr = urllib2.HTTPPasswordMgrWithDefaultRealm()
password_mgr.add_password(None, "http://twitter.com/", username, password)
handler = urllib2.HTTPBasicAuthHandler(password_mgr)
opener = urllib2.build_opener(handler)
try:
file_obj = opener.open(URL)
messages = file_obj.read()
print messages
except IOError, e:
print "Error: ", e