【问题标题】:How to POST via Reddit API (addcomment)如何通过 Reddit API 发布(添加评论)
【发布时间】:2014-08-22 09:57:26
【问题描述】:

我已经能够成功登录用户并返回他们的详细信息。下一步是让他们通过我的应用发表评论。

我尝试从 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 请求被搞砸了,因为我没有收到任何响应。我没有收到任何错误,所以我不确定出了什么问题。任何帮助将不胜感激。谢谢!

【问题讨论】:

  • 您链接的 reddit SDK 已经提供了该功能。我建议您只使用 SDK 而忘记尝试自制自己的解决方案。这样,只要定期更新 SDK,您就不必担心维护 SDK。
  • 我的问题是我在没有使用 SDK 的情况下对 oAuth 登录/令牌检索进行了编码,并且它运行良好,我不想弄清楚如何在 SDK 上再次执行此操作。我真正做的(或试图做的)只是在 SDK 中属于访问令牌的硬编码,因为我不是通过 SDK 获得的。

标签: php curl reddit


【解决方案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';
    }
}

您只需确保在运行任何 api 调用之前调用setAuthVars

【讨论】:

  • 我陷入了重定向循环,就像其他人的回答一样。
  • 我的配置文件设置错误导致重定向。无论哪种方式,这似乎都没有使用我尝试提供的访问令牌。它让我登录,然后将我发送到指定的重定向页面而不发布任何内容。我的代码是require_once("reddit-sdk.php"); $MyReddit = new MyReddit(); $authvars = $MyReddit->setAuthVars($reddit_access_token, 'Bearer'); $response = $MyReddit->addComment($name, $text);
猜你喜欢
  • 2020-05-04
  • 2020-10-22
  • 1970-01-01
  • 2014-10-28
  • 2019-10-21
  • 1970-01-01
  • 2016-01-24
  • 2017-11-01
  • 1970-01-01
相关资源
最近更新 更多