2011-09-15 9 views
5

Używanie php do Reddit API do przesłania historii zwraca zły captcha jako błąd. Jestem w stanie zalogować się za pomocą api i uzyskać usermod i captcha idealnie za pomocą api. Idealnie, jeśli plik cookie reddit_session przepuszcza powinien rozpoczynać i nie powrócić złe captcha może ktoś mi rzucić trochę światła na ten .. odnośnikReddit API w php zwraca złe captcha za przesłanie historii

odniesienie: https://github.com/reddit/reddit/wiki/API

<?php 
$user = ""; 
$passwd = ""; 
$url = "http://www.reddit.com/api/login/".$user; 

$r = new HttpRequest($url, HttpRequest::METH_POST); 
$r->addPostFields(array('api_type' => 'json', 'user' => $user, 'passwd' => $passwd)); 

try { 
    $send = $r->send(); 
    $userinfo = $send->getBody(); 
} catch (HttpException $ex) { 
    echo $ex; 
} 

$arr = json_decode($userinfo,true); 

$modhash = $arr['json']['data']['modhash']; 
$reddit_session = $arr['json']['data']['cookie']; 

$post = array('uh'=>$modhash, 
       'kind'=>'link', 
       'url'=>'yourlink.com', 
       'sr'=>'funny', 
       'title'=>'omog-asdfasf', 
       'id'=>'newlink', 
       'r'=>'funnyier',     
       'renderstyle'=> 'html'    
       ); 


$url = "http://www.reddit.com/api/submit"; 

// Upvote RoboHobo's comment :) 
// Add user cookie data 
$r->addCookies(array("reddit_session" => $reddit_session)); 
// Set URL to vote 
$r->setUrl($url); 
// Add vote information, found at http://wiki.github.com/talklittle/reddit-is-fun/api-all-functions 
$r->setPostFields($post); 
// Send request blindly 


try { 
    $userinfo = $r->send(); 
} catch (HttpException $ex) { 
    echo $ex; 
} 
pre($userinfo); 
exit; 

function pre($r){ 
echo "<pre />"; 
print_r($r); 
} 
?> 
+0

Chciałbym poznać odpowiedź na to pytanie, sam mając ten sam problem. Jaki jest sens CAPTCHA w API? – Kane

Odpowiedz

3

Z tego co mogę powiedzieć, u moment CAPTCHA jest uszkodzony w API Reddit. Pierwotnie używali przestarzałej PyCAPTCHA i byli migrating to reCAPTCHA. Od tego czasu nastąpił issue z użyciem api_type:json, który ma pracę dookoła, a ktoś na Github aktualnie pracuje. Zaproponował również wyjaśnienie/rozwiązanie:

Po prostu wynik json (ale nie jquery) powinien zawierać captcha_id, gdy wymagane jest> captcha. Przez captcha_id mam na myśli część do uzupełnienia adresu URL:> http://www.reddit.com/captcha/ (captcha_id) .png

Przypadkiem użycia, który napotkałem, gdy próbuję przesłać historię przez api używający> api_type: json. Zostałem dobrze poinformowany, że mój nieistniejący captcha jest niepoprawny, jednak muszę wtedy poprosić o numer http://www.reddit.com/api/new_captcha, aby uzyskać> captcha_id. Ta ostatnia podróż w obie strony wydaje się niepotrzebna.

5

dla nikogo, że natknął się na to pytanie ostatnio i nadal ma ten problem:

Powyższy problem został naprawiony i działa poprawnie jednak po utworzeniu nowego konta dla Reddit bot i spróbować złożyć historia otrzymasz błąd bad_captcha. Nowe konta muszą przesłać captcha, dopóki nie uzyskają pewnej ilości karmy, więc to jest błąd, który widzisz. Wypróbuj żądanie ze starszym kontem, co powinno rozwiązać Twój problem.

+0

Dziękuję bardzo. Wziął mnie na zawsze, aby znaleźć tę poprawkę. – DLeh

+0

Czy mówisz, że nie możesz uzyskać obrazu linku captcha, abyśmy mogli go umieścić w aplikacji, aby użytkownik mógł rozwiązać aplikację? – cikatomo

Powiązane problemy