Как отправлять сообщения через Reddit API (дополнение)

Мне удалось успешно авторизовать пользователя и вернуть его данные. Следующий шаг - заставить их оставить комментарий через мое приложение.

Я попытался изменить код из reddit-php-sdk - https://github.com/jcleblanc/reddit-php-sdk/blob/master/reddit.php - но я не могу заставить его работать.

Мой код выглядит следующим образом:

function addComment($name, $text, $token){
    $response = null;
    if ($name && $text){
        $urlComment = "https://ssl.reddit.com/api/comment";
        $postData = sprintf("thing_id=%s&text=%s",
                            $name,
                            $text);
        $response = runCurl($urlComment, $token, $postData);
    }
    return $response;
}

function runCurl($url, $token, $postVals = null, $headers = null, $auth = false){
    $ch = curl_init($url);
    $auth_mode = 'oauth';

    $options = array(
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_CONNECTTIMEOUT => 5,
        CURLOPT_TIMEOUT => 10
    );

    $headers = array("Authorization: Bearer {$token}");
    $options[CURLOPT_HEADER] = false;
    $options[CURLINFO_HEADER_OUT] = false;
    $options[CURLOPT_HTTPHEADER] = $headers;

    if (!empty($_SERVER['HTTP_USER_AGENT'])){
        $options[CURLOPT_USERAGENT] = $_SERVER['HTTP_USER_AGENT'];
    }

    if ($postVals != null){
        $options[CURLOPT_POSTFIELDS] = $postVals;
        $options[CURLOPT_CUSTOMREQUEST] = "POST";
    }

    curl_setopt_array($ch, $options);
    $apiResponse = curl_exec($ch);
    $response = json_decode($apiResponse);

    //check if non-valid JSON is returned
    if ($error = json_last_error()){
        $response = $apiResponse;    
    }
    curl_close($ch);

    return $response;
}

$thing_id = 't2_'; // Not the actual thing id
$perma_id = '2daoej'; // Not the actual perma id

$name = $thing_id . $perma_id;
$text = "test text";

$reddit_access_token = $_SESSION['reddit_access_token'] // This is set after login

addComment($name, $text, $reddit_access_token);

Функция addComment объединяет комментарии в соответствии с их API - http://www.reddit.com/dev/api

addComment затем вызывает runCurl, чтобы сделать запрос. Я предполагаю, что запрос curl испорчен, потому что я не получаю никакого ответа. У меня нет ошибок, поэтому я не уверен, что не так. Любая помощь будет оценена по достоинству. Спасибо!


person Andrew    schedule 22.08.2014    source источник
comment
Связанный вами Reddit SDK уже предоставляет такую ​​возможность. Я предлагаю вам просто использовать SDK и забыть о попытках создать собственное решение. Таким образом, вам не нужно беспокоиться о поддержке SDK, если вы периодически его обновляете.   -  person Scopey    schedule 22.08.2014
comment
Моя проблема в том, что я закодировал получение логина / токена oAuth без использования SDK, и он работает отлично, и я не хочу выяснять, как это сделать снова в SDK. Все, что я действительно сделал (или пытался сделать), - это жесткий код в токене доступа, которому он принадлежит в SDK, поскольку я не получаю его через SDK.   -  person Andrew    schedule 22.08.2014


Ответы (1)


Если вы используете собственное решение oAuth, я бы предложил использовать SDK, как я сказал в своем комментарии, но расширить его, чтобы перезаписать метод конструкции.

class MyReddit extends reddit {
    public function __construct()
    {
        //set API endpoint
        $this->apiHost = ENDPOINT_OAUTH;
    }
    public function setAuthVars($accessToken, $tokenType)
    {
        $this->access_token = $accessToken;
        $this->token_type = $tokenType;

        //set auth mode for requests
        $this->auth_mode = 'oauth';
    }
}

Вам просто нужно убедиться, что вы вызываете setAuthVars перед выполнением любых вызовов API.

person Scopey    schedule 22.08.2014
comment
Я застреваю в цикле перенаправления, как и в случае с ответом другого парня. - person Andrew; 22.08.2014
comment
Я неправильно настроил конфигурационный файл, что привело к перенаправлениям. В любом случае, похоже, это не использует токен доступа, который я пытаюсь ему дать. Он отправляет меня на вход, а затем отправляет меня на указанную страницу перенаправления, ничего не публикуя. Мой код require_once("reddit-sdk.php"); $MyReddit = new MyReddit(); $authvars = $MyReddit->setAuthVars($reddit_access_token, 'Bearer'); $response = $MyReddit->addComment($name, $text); - person Andrew; 22.08.2014