Reddit API в php возвращает плохой код для отправки истории - PullRequest
5 голосов
/ 16 сентября 2011

Использование php для Reddit API для отправки истории возвращает плохую капчу как ошибку.Я могу войти через API и получить usermod и captcha отлично используя API.В идеале, если файл cookie reddit_session пропущен, он должен публиковать и не возвращать плохую капчу, может кто-то пролил мне немного света на эту ссылку.

ссылка: 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);
}
?>

Ответы [ 2 ]

5 голосов
/ 10 июля 2012

Для тех, кто в последнее время сталкивался с этим вопросом и до сих пор имеет эту проблему:

Эта проблема была исправлена ​​и работает правильно, однако, если вы создали новую учетную запись для своего бота reddit и попытаетесь отправить историю, вы получите ошибку bad_captcha. Новые аккаунты должны отправлять капчи, пока они не наберут определенное количество кармы, так что это ошибка, которую вы видите. Попробуйте запрос с более старой учетной записью, и это должно решить вашу проблему.

3 голосов
/ 20 января 2012

Из того, что я могу сказать, на данный момент CAPTCHA не работает в Reddit API.Изначально они использовали устаревший PyCAPTCHA и мигрировали в reCAPTCHA .С тех пор была проблема с использованием api_type:json, которая имеет обходной путь, и кто-то на github в настоящее время работает над этим.Он также предложил объяснение / решение:

Проще говоря, результат json (хотя не jquery) должен содержать captcha_id, когда требуется> captcha.Под captcha_id я подразумеваю часть, чтобы завершить URL-адрес, например:> http://www.reddit.com/captcha/(captcha_id).png

Случай использования, с которым я столкнулся, - это попытка представить историю через API с помощью> api_type: json.Я приятно уведомлен, что моя несуществующая капча неверна, однако я> затем должен сделать запрос к http://www.reddit.com/api/new_captcha, чтобы получить> captcha_id.Последнее путешествие туда и обратно кажется ненужным.

...