【问题标题】:Pulling Instagram Images In To WordPress and Programatically Creating A Post将 Instagram 图像拉入 WordPress 并以编程方式创建帖子
【发布时间】:2015-07-30 16:52:57
【问题描述】:

我想做的是将 Instagram 图片拉到我的 WordPress 网站并创建一个帖子。

我的代码用于以编程方式创建帖子并提取 Instagram 图片。我的问题是我想将每个帖子的 WordPress 内容设置为我的 Instagram 图片 URL。我创建了一个函数,其中包含一个包含 Instagram URL 的 foreach 循环。调用该函数不起作用。

function callInstagram($url)
    {
    $ch = curl_init();
    curl_setopt_array($ch, array(
    CURLOPT_URL => $url,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_SSL_VERIFYPEER => false,
    CURLOPT_SSL_VERIFYHOST => 2
    ));

    $result = curl_exec($ch);
    curl_close($ch);
    return $result;
    }

    $tag = 'dog';
    $client_id = "my_client_id";
    $url = 'https://api.instagram.com/v1/tags/'.$tag.'/media/recent?client_id='.$client_id;

    $inst_stream = callInstagram($url);
    $results = json_decode($inst_stream, true);

    //Now parse through the $results array to display your results... 
    function testingInsta($results) {
        foreach($results['data'] as $item){
            $image_link = $item['images']['low_resolution']['url'];
            //echo '<img src="'.$image_link.'" />';
        }
    }   

/*  INCLUDE WRAPPER  */
// https://github.com/HarriBellThomas/Wordpress_PostController
require_once(get_template_directory() . '/class.postcontroller.php');


/*  USAGE  */
$Poster = new PostController;
$Poster->set_title( "tesing 11" );
$Poster->add_category(array(1)); //Use category ID
$Poster->set_type( "post" );
$Poster->set_content("<img src='" . testingInsta($results). "'>");
$Poster->set_page_template( "single.php" );
$Poster->set_post_state( "draft" );


$Poster->create();

【问题讨论】:

    标签: php instagram wordpress instagram-api


    【解决方案1】:

    您似乎已经注释掉了testingInsta 中的echo 语句。但是,我会稍微重构代码,以便您的函数返回一个字符串,而不是每次迭代都回显。

    function testingInsta($results) {
        $html = '';
        foreach($results['data'] as $item){
            $image_link = $item['images']['low_resolution']['url'];
            $html .= '<img src="'.$image_link.'" />';
        }
    
        return $html;
    }
    

    然后,您需要修改 USAGE 块以省略 &lt;img&gt; 标记,而只需将帖子的内容设置为函数返回的任何内容。

    如果您只是检索单个图像,则根本不需要迭代。相反,您可以简单地:

    if ( count($results['data']) == 1 ){
        $item = array_pop($results['data']);
        return $item['images']['low_resolution']['url'];
    }
    

    【讨论】:

    • 嗨@john-hall 感谢您这么快就写了回复!我收到此错误注意:未定义的索引:第 290 行中的数据警告:array_pop() 期望参数 1 为数组,第 291 行中给出的空值第 290 行是; if ( count($results['data'] == 1 )) { 和 291 是; $item = array_pop($results['data']);
    • 我遗漏了一些右括号,代码已更新。检查$results['data'] 是否是一个数组,我假设它基于您提供的代码示例。
    • 我加上括号。我用改变了我的使用块来使用你的 if 语句。 $results['data'] 是 Instagram 帖子中所有数据的数组。所以我所做的是创建一个新变量$results_data = $results['data']; 并将其设置为我的函数参数,它可以工作!!!
    • 但我认为唯一的问题是我不知道它多久检查一次是否有带有指定主题标签的新帖子。当我恢复使用 foreach 循环时,就会有 LOADS 的图像 URL 作为帖子的内容。您将如何确保每次上传带有指定标签的图像时都会创建一个新帖子?感谢您的帮助!
    • @StuartNelson 你需要有一些识别图像的方法,然后跳过你已经发布的那些。我不确定 IG API 是如何工作的,但是如果您限制 API 调用以检索例如 100 张最近的图像,那么处理起来还不错。您可以将您发布的所有图像存储在数据库表中,当您准备发布新帖子时,只需确保在该数据库表中的任何位置都找不到“要发布的图像”的名称。您可能希望获取数据库表中的所有记录,将它们存储在一个数组中,然后使用 in_array 或 isset() 进行检查。
    猜你喜欢
    • 1970-01-01
    • 2013-01-14
    • 1970-01-01
    • 2020-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多