whitelisted unfollowr troubles
Nov 13 2009Здарылася неверагоднае і майго ненагляднага @unfollowr дадалі ў сьпіс выбраных карыстачоў Twitter, якім дазволена выкарыстоўваць API запыты без абмежаваньняў. Цяпер мне піша, што засталося 20000 запытаў на гадзіну, а не 150, хаця колькі б я іх не рабіў, усё роўна чысло не зьмяняецца. Ня ведаю нават, зь якой спробы мне ўсё гэта далося. Далей пра сумнае і рознае.
Незадоўга да гэтага я ўвогуле вырашыў перапісаць бота з Perl на Python. Проста так захацелася, ды й Python трэба ўзгадваць час ад часу, а то я нешта яго падзакінуў. Перапісалася ўсё проста цудоўна, нават лепей, чым было. Як толькі зьявілася магчымасьць рабіць неабмежаваную колькасьць запытаў да API, дык я адразу адмовіўся ад Yahoo Pipes, які час ада часу выдаваў не самыя поўныя дадзеныя, что, дарэчы, кампенсавалася частымі праходамі па сьпісах. Толькі вось Twitter API — рэч у сабе і вялікая загадка.
Вось напрыклад, ёсьць нейкія людзі, якія ня хочуць, каб іх аднаўленьні чыталі іншыя людзі, калі ім на тое не далі дазволу. Ну й фіг зь імі, няхай. Эдакія сацыяпаты таксама не супраць даведацца, хто такі подлы перастаў іх чытаць. Таксама можна зразумець. Яны фолавілі @unfollowr, той ім праз Yahoo Pipes цягаў сьпісы фолавераў і здаецца нават нешта там вылічваў. Здаецца і вылічваеў, а атрымваецца, што і не. Калі ўсё працавала праз Pipes, было незаўважна, што там API кажа наконт такіх карыстальнікаў (за ўсімі не ўгледзеш), а калі праца пачала весьціся напрамую, тут і ўсплылі дзіўныя глюкі. На некаторыя запыты Python пачаў запытваць пароль, хоць той і даваўся яўна ў URL у выглядзе http://user:pass@host/. Я ўжо думаў, што гэта проста API глючыць месцамі, напісаў WorkAround нават (аб гэтым пазьней), ды вось толькі ўсё ня тое.
Выяўляецца, калі карыстач з закрытымі аднаўленьнямі чытае цябе, а ты яго не, то атрымаць сьпіс ягоных фолавераў праз API нельга. У Web інтэрфейсе паглядзець можна, а праз API забраць нельга. Логіка шоппц. Прычым мала таго, што нельга, выдавала б хоць якую інфу ў адказе, дые не, робіцца дзіўней. Выдаецца HTTP Error 401 (Not Authorized) і патрабуецца аўтарызацыя. Новая аўтарызацыя, нібыта блін у мяне 500 логінаў у гэты чортавы твітэр і я іх буду перабіраць. З такой радаснай нагоды я нават напісаў у Google групу twitter-development-talk. Пакуль ціха, будзем чакаць рэзультатаў.
Дарэчы пра тое, як пазьбегчы запыту пароля ў кансолі, калі дадзеныя атрымліваюцца праз urllib у python. Па змоўчаньні выкарыстоўваецца “Opener” FancyURLopener, які бярэ на сабе брудную працу па апрацоўцы многіх сітуацый. дык вось менавіта ён і выдае запыт пароля. Можна зрабіць для яго патомка, у ім перагрузіце мэтад атрыманьня пароля, але гэта тупіковы шлях і нам ён непатрэбны ўвогуле. Нам проста трэба выкарыстоўваць іншы клас для атрыманьня дадзеных, а менавіта проста URLOpener, які будзе не запытваць пароль, а генерыраваць выключэньне, якое мы зможам прыгожа апрацаваць у аўтаматычным рэжыме. Лістынгі даваць ня буду, пачытаць падрабязьней можна вось тут, сам код @unfollowr ляжыць на Github, там можна паглядзець, як яно ўвогуле ў мяне рэалізавана і працуе.
Виртуальный сервер – vps — XEN виртуализация на дороге не валяется
{ Tags: 401, api, code, FancyURLopener, github, google groups, http, python, twitter, unfollowr, urllib, yahoo pipes }




Recent Comments