Как пометить элемент как прочитанный с помощью API для чтения google (с использованием python)

Я использую следующую функцию python, чтобы пометить элемент как прочитанный в программе чтения Google, но она всегда возвращает ошибку HTTPErrors: HTTP 401: Unauthorized:

def mark_as_read(SID, entryid):  
    token = get_token(SID)  
    mark_as_read_url = 'http://www.google.com/reader/api/0/edit-tag'  
    header = {'Content-type': 'application/x-www-form-urlencoded'}  
    post_data = urllib.urlencode({ 'i': entryid, 'a': 'user/-/state/com.google/read', 'ac': 'edit', 'T': token })  
    request = urllib2.Request(mark_as_read_url, post_data, header)  
    f = urllib2.urlopen(request)  
    result = f.read()

Другие функции успешно извлекают каналы и записи, поэтому это не что-то простое, например неправильное имя пользователя или пароль. Я читал, что требуется urlencoding, поэтому сделал это. Пример идентификатора записи выглядит так: tag: google.com, 2005: reader / item / f66ad0fb64f56a22

Что я делаю неправильно?


person Ned Ryerson    schedule 08.11.2009    source источник
comment
Это POST, и примеры успешных запросов, которые вы используете, звучат как GET. Есть ли у вас другие успешные POST-сообщения? Возможно, в этом API есть какая-то разница между ними, которую вы еще не поняли? PS: Neds Unite!   -  person Ned Batchelder    schedule 08.11.2009
comment
Я обращался к Google Reader таким же образом, используя Perl, и у меня все работает хорошо, кроме изменения состояния элементов (пометка как прочитанная, пометка и т. Д.). У меня отлично работает перечисление элементов в Reader ... У меня такое ощущение, что это может быть что-то со стороны Google, или, может быть, неофициальный API не обновлен о том, как отмечать элементы как прочитанные?   -  person BrianH    schedule 11.06.2010
comment
есть ли обновление по этому поводу. Мне также нужно реализовать пометку как прочитанное в приложении Python. Благодарность   -  person Vaibhav Garg    schedule 16.07.2010


Ответы (2)


Кажется, вам не хватает заголовка аутентификации:

header = {
    'Content-type': 'application/x-www-form-urlencoded',
    'Authorization': 'GoogleLogin auth=YOUR_AUTH_TOKEN'
}
person coryjacobsen    schedule 10.05.2011

Когда я сравниваю это с запросом, который я делаю в Firefox (проверенный с помощью liveheaders), он выглядит нормально. У меня есть только лишние параметры

async=true
sync=true
s=feed/http://feeds.feedburner.com/37signals/beM

А в юзере на месте - стоит длинный id.

Таким образом, вы можете попробовать добавить два параметра синхронизации, добавить параметр s и ввести идентификатор для -.

Что касается urlencoding, которое вы делаете, похоже, это нормально.

person markijbema    schedule 02.03.2011