Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/254.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何通过RedditAPI发布(addcomment)_Php_Curl_Reddit - Fatal编程技术网

Php 如何通过RedditAPI发布(addcomment)

Php 如何通过RedditAPI发布(addcomment),php,curl,reddit,Php,Curl,Reddit,我已成功登录用户并返回其详细信息。下一步是让他们通过我的应用程序发表评论 我试图修改reddit php sdk中的代码,但无法使其正常工作 我的代码如下: function addComment($name, $text, $token){ $response = null; if ($name && $text){ $urlComment = "https://ssl.reddit.com/api/comment"; $post

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

我试图修改reddit php sdk中的代码,但无法使其正常工作

我的代码如下:

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将注释放在一起-


addComment然后调用runCurl发出请求。我的猜测是curl请求出错了,因为我没有收到任何响应。我没有收到任何错误,所以我不确定出了什么问题。任何帮助都将不胜感激。谢谢

如果您正在使用自己的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。

您链接的reddit SDK已经提供了该功能。我建议您只使用SDK,而不要尝试自制您自己的解决方案。这样你就不必担心维护SDK,只要你定期更新它。我的问题是,我在没有使用SDK的情况下编写了oAuth登录/令牌检索代码,它工作得很好,我不想知道如何在SDK上再次这样做。我真正做过或试图做的只是在SDK中访问令牌中的硬代码,因为我没有通过SDK获取它。我陷入了重定向循环,就像其他人的回答一样。我的配置文件设置错误,导致了重定向。不管怎样,这似乎没有使用我尝试给它的访问令牌。它将我发送到登录,然后将我发送到指定的重定向页面,而不发布任何内容。我的代码是require_oncereddit-sdk.php$MyReddit=新的MyReddit$authvars=$MyReddit->setAuthVars$reddit_访问_令牌,'Bearer'$响应=$MyReddit->addComment$name,$text;