Facebook Marketing API:将图片上传到库提供了一个 URL

Posted

技术标签:

【中文标题】Facebook Marketing API:将图片上传到库提供了一个 URL【英文标题】:Facebook Marketing API: Upload Image to library provided a URL 【发布时间】:2018-02-07 21:42:38 【问题描述】:

我是 Facebook 营销 API 的新手,我正在做的是将图像上传到我的 FB 营销库。

现在,我可以成功地将图片上传到 FB Marketing,但很遗憾,我看不到是否有办法从 URL 上传图片。

有没有人有过这方面的经验?

代码示例:

     Api::init(getenv('FACEBOOK_APP_ID'), getenv('FACEBOOK_APP_SECRET'), getenv('FACEBOOK_APP_TOKEN'));


    /**
     * @inheritdoc
     */
    public function testFunc()
    
        $adAccountId = getenv('FACEBOOK_APP_ACCOUNT_ID');
        $account = new AdAccount();
        $account->AdAccountFields::ID = $adAccountId;

        $image = new AdImage(null, "act_$account->id");

        $image->AdImageFields::FILENAME = getenv('FACEBOOK_APP_MARKETING_PATH').'fbTestImage.png';
        $image->create();

        $this->line('Image Hash: '.$image->AdImageFields::HASH.php_EOL);
    

【问题讨论】:

由于文档没有提到它,我认为这是不可能的。 谢谢@CBroe。在这种情况下你会推荐什么?获取然后在本地存储图像是一种选择吗? 好吧,这是一个选择...... 感谢您的意见,@CBroe。谢谢! 【参考方案1】:

您必须使用 PHP 从 URL 中提取图像并将其写入临时文件,然后上传。然后在完成时删除临时文件(不理想,但解决方案)。 Node.js 营销 API 您可以向 API 提供内容而不是文件名,这很好。

不过目前可能的解决方案。

$url = "https://www.sample/image.png";

// Create output file name
$arr = explode("/",$url);
$img_file = dir(__FILE__).'/tmp_'.$arr[count($arr)-1];
// Load File contents from URL
$data = file_get_contents($url);
// Write Temporary File
$fp = fopen($img_file,"w");
fwrite($fp,$data);
fclose($fp);

// Then Push the temp file to Facebook
// Rest of FB Code...
$image->AdImageFields::FILENAME = $img_file;

// Wait for the Upload to complete then delete the temp file
unlink($img_file);

【讨论】:

以上是关于Facebook Marketing API:将图片上传到库提供了一个 URL的主要内容,如果未能解决你的问题,请参考以下文章

Facebook Marketing Api - 循环运行抛出“AuthorizationException 发生未知错误”。 (第二次)

在 Facebook Marketing api 中创建 geo_locations 定位规范时获取无效的参数响应

如何获得Facebook广告UTM

Facebook api用于创建业务经理导致权限错误

如何通过API获取Facebook跟踪网址参数

如何通过业务经理请求访问用户的Facebook页面?