2011-09-15 15 views
5

El uso de php para Reddit api para enviar una historia devuelve mal captcha como error. Puedo iniciar sesión usando la API y obtener usermod y captcha perfectamente usando api. ideal sería que si la cookie se pasa reddit_session debe publicar y no regresar mal código de imagen Puede alguien arrojar alguna luz sobre este enlace ..Reddit API en php devuelve mal captcha para enviar historia

referencia: 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

ME ENCANTARÍA saber la respuesta a esto, teniendo el mismo problema yo mismo. ¿Cuál es el punto de CAPTCHA en una API? – Kane

Respuesta

3

De lo que puedo decir, en el momento CAPTCHA se rompe en la API de Reddit. Originalmente estaban usando un PyCAPTCHA obsoleto y eran migrating to reCAPTCHA. Desde entonces, ha habido un issue con el uso de api_type:json que tiene un efecto temporal y alguien en github lo está trabajando actualmente. También ofreció una explicación/solución:

En pocas palabras, el resultado json (aunque no jquery) debe contener el captcha_id cuando se requiere un> captcha. Por captcha_id me refiero a la parte para completar una URL como la followng:> http://www.reddit.com/captcha/ (captcha_id) .png

El caso de uso que encontré es cuando se trata de presentar una historia a través de la api usando> api_type: json. Estoy muy bien informado de que mi captcha inexistente es incorrecta, sin embargo, entonces> debo hacer una solicitud al http://www.reddit.com/api/new_captcha para obtener el> captcha_id. Este último viaje de ida parece innecesario.

5

Para cualquier otra persona que se topó con esta pregunta últimamente y sigue teniendo esa cuestión:

El problema anterior se fijó y funciona correctamente sin embargo, si ha creado una nueva cuenta para su bot reddit y tratar de presentar una historia que recibirá un error bad_captcha. Las cuentas nuevas deben enviar captchas hasta que obtengan una cierta cantidad de karma, por lo que este es el error que estás viendo. Pruebe la solicitud con una cuenta anterior y esto debería resolver su problema.

+0

Muchas gracias. Me llevó para siempre para encontrar esta solución. – DLeh

+0

¿Estás diciendo que no puedes obtener una imagen de enlace de captcha para que podamos insertarla en la aplicación para que el usuario pueda resolverla dentro de la aplicación? – cikatomo