首页 > 解决方案 > 使用 php 在 reddit 上发布链接并添加评论

问题描述

我想创建一个 cronjob 定期发布指向 reddit 的链接(imgur 上的图像)并在发布的链接中添加评论。

我发现了这样的东西https://github.com/jcleblanc/reddit-php-sdk

我创建了这个在reddit上发布链接的脚本

<?
    require_once('reddit/reddit.php');
    $reddit = new reddit();
    
        $response = $reddit->createStory('title', 'https://i.imgur.com/....', 'funny');
    
    $pageInfo = $reddit->getPageInfo("https://i.imgur.com/...");
    
    
    
    echo var_dump($response);
    echo '<br><br>-------------------------------------------------------------------<br><br>';
    echo var_dump($pageInfo);
    
    echo '<br><br>-------------------------------------------------------------------<br><br>';
    
    echo 'name: '.$pageInfo->name;
    
    $response = $reddit->addComment('name from pageInfo', 'comment');
    ?>

链接有效,但我无法从 $pageInfo 中获取名称,我遗漏了一些东西,但我真的很迷茫和困惑......

$pageInfo var_dump,很可爱,因为太长了...

object(stdClass)#2 (2) {
  ["kind"]=>
  string(7) "Listing"
  ["data"]=>
  object(stdClass)#3 (5) {
    ["modhash"]=>
    NULL
    ["dist"]=>
    int(1)
    ["children"]=>
    array(1) {
      [0]=>
      object(stdClass)#4 (2) {
        ["kind"]=>
        string(2) "t3"
        ["data"]=>
        object(stdClass)#5 (108) {
          ["approved_at_utc"]=>
          NULL
          ["subreddit"]=>
          string(15) "funny"
          ["selftext"]=>
          string(0) ""
          ["author_fullname"]=>
          string(8) "t2_mgufp"
          ["saved"]=>
          bool(false)
          ["mod_reason_title"]=>
          NULL
          ["gilded"]=>
          int(0)
          ["clicked"]=>
          bool(false)
          ["title"]=>
          string(11) "test title3"
          ["link_flair_richtext"]=>
          array(0) {
          }
          ["subreddit_name_prefixed"]=>
          string(17) "r/funny"
          ["hidden"]=>
          bool(false)
          ["pwls"]=>
          NULL
          ["link_flair_css_class"]=>
          NULL
          ["downs"]=>
          int(0)
          ["thumbnail_height"]=>
          int(140)
          ["top_awarded_type"]=>
          NULL
          ["hide_score"]=>
          bool(false)
          ["name"]=>
          string(9) "t3_hjgx8u"

- - - - - - - - - - - - - 更新 - - - - - - - - - - -

也许我发现......也许这不是最简单或最优雅的方式,但它似乎工作......

此函数将对象(stdClass)转换为php可以读取的数组

function objectToArray( $object )
    {
        if( !is_object( $object ) && !is_array( $object ) )
        {
            return $object;
        }
        if( is_object( $object ) )
        {
            $object = get_object_vars( $object );
        }
        return array_map( 'objectToArray', $object );
    }

有了这个,你可以有 name 参数来添加评论

$array_pageInfo = objectToArray($pageInfo);
$comment_name = $array_pageInfo['data']['children'][0]['data']['name'];

但现在我有最后一个大疑问。在各种测试中,我注意到授权令牌每小时都会过期,我想在我的服务器上创建一个 cronjob,但是如果令牌过期......

我如何让这个东西在 cronjob 中工作?

标签: phparraysapiredditstdclass

解决方案


最后,这些天我一直在努力,我想我解决了它。

这并不容易或快速,而且我还必须添加其他内容,例如按照建议更新令牌的小脚本和上传图片的 imgur api,因为许多 subreddit 不接受其他地址,例如来源等。等等

一个由小部分组成的完整脚本出来了,最终编写它比理解每个步骤的工作原理更容易。

然而,一个全新的脚本出现了,它独立于最初使用的 sdk,它自己完成所有事情,而且它似乎在 crontab 上也做得很好。

由于我的记忆力很差,我在我的博客中一步一步地解释了它,下次我需要它的时候,我也在那里翻译成英文。

如果有人需要,你可以在这里找到它:https ://www.alebalweb-blog.com/87-cronjob-that-uploads-a-photo-from-imgur-and-adds-a-comment-on- reddit.html


推荐阅读