【问题标题】:How to post a gallery-image on a users wall如何在用户墙上发布画廊图像
【发布时间】:2011-06-09 23:39:16
【问题描述】:

我们的应用程序使用 PHP- 以及 Facebook 的 JS-SDK。我们可以通过这两个 sdks 访问用户图像和他朋友的图像。也可以将照片上传到用户相册。

用户当前选择了他的一张图片,该图片在我们的服务器上被处理并上传到 Facebook 到它来自的相册中。那部分有效。我们现在想将上传的图片发布到用户墙上。 Facebook 本身会在用户提要上生成有关新上传图片的帖子(可以在上传请求时禁用),但这些帖子不可自定义。标准的 facebook-post 请求需要一个可选照片的 url。该文档声明不允许链接到来自 facebook 内容交付网络的图像(已由图形 api 确认,因为它会引发适当的错误)。

是否可以以某种方式创建包含画廊图像的标准墙贴?理想情况下,它会使用画廊弹出窗口,但这显然是非常好的。

外部托管副本是我们已经知道的(不需要的)解决方法。重新上传图片是一个选项,只要它没有在图库中出现两次。

【问题讨论】:

    标签: facebook facebook-graph-api


    【解决方案1】:

    简单的解决方案:

    通过 tinyurl api 为您获取 fbcdn 的 tinyurl:

    上面的网址示例:

    http://tinyurl.com/api-create.php?url=http://a4.sphotos.ak.fbcdn.net/hphotos-ak-snc3/13943_196960329960_683709960_2997879_7206516_n.jpg
    

    返回:

    http://tinyurl.com/3ta96kh
    

    然后将此网址用作“图片”,我在这里尝试过,它可以工作! :http://jsfiddle.net/dwarfy/VYAeD/27/

    还有另一个解决方案here,但似乎 facebook 纠正了它,当我使用 https://graph.facebook.com/PICTURE_ID 作为图片而不是 FBCDN 图像 url 发布时,它仍然显示 facebook CDN 的错误。

    我认为这是最好的解决方案......

    我的示例没有使用链接参数,但您可以将其设置为图库图片...

    【讨论】:

    • 有了这个,您不必在服务器上拥有图像的副本,也不必自己进行重定向,但它会为您的图像建立一个公共链接..在隐私方面可能不是很好
    • 无论如何,FBCDN 中的任何图像也都有一个“公共链接”,只是我们找不到我猜的那些 url ..
    【解决方案2】:

    确实,您不能将保存在 fb 上的图片发布到用户的墙上,但您也不必将其物理保存在您的服务器上。如果要发布图片,例如:

    http://a4.sphotos.ak.fbcdn.net/hphotos-ak-snc3/13943_196960329960_683709960_2997879_7206516_n.jpg

    如您所知,facebook 不会接受这一点。但是发布这样的内容是没有问题的:http://yourserver.com/script.php?image=a4.sphotos.ak.fbcdn.net/hphotos-ak-snc3/13943_196960329960_683709960_2997879_7206516_n.jpg(没有 http://——它很重要,如果你包含 http://,facebook 会发现发生了什么——我们不想要它:)

    script.php 是您服务器上执行此操作的 php 文件:

    <?
        $url = "http://".$_GET['image'];
        header('Content-type: image/jpeg');
        echo file_get_contents($url);   
    ?>
    

    或类似的东西:

    <?
        $url = "http://".$_GET['image'];
        $image = imagecreatefromjpeg($url);
        //some image modifications here//
        header('Content-type: image/jpeg');
        echo imagejpeg($image, null, 100);
    ?>
    

    您还可以添加带有 url 的数据库并发布如下内容:http://yourserver.com/script.php?imageid=IDhidding all images' real path.


    如果你想在墙上发布图片后节省流量,只需重定向:

    <?
        //if published then just redirect
        $url = "http://".$_GET['image'];
        header('Location: '.$url); die();
    ?>
    

    【讨论】:

    • 有趣的想法虽然我仍然必须在流量方面“提供”所有图像。您的第一个建议适用于任何网址,因此任何人都可以使用我们的服务器来代理请求。所以我必须像在你的第三个例子中那样保护系统。这将导致更多的开销,因为我们必须使用数据库。将图像存储在我们的服务器上仍然是最快和最简单的方法,即使它不是一种选择。 +1 创意
    • 发布后(当 fb 上的缩略图已经创建时)您可以从 file_get_contents($url) 切换到重定向: header('Location: $url');死();
    【解决方案3】:

    您必须复制该图像,否则您无法在标准帖子对话框中使用该图像。

    使用PHP函数

    copy()
    

    我知道您正在寻找任何其他替代方案,但在您的服务器或任何其他服务器上创建备用映像是唯一的解决方案。

    【讨论】:

    • 正如我所说:拥有该图像的外部副本是一种不需要的解决方案。复制图像不是问题的一部分。
    • 是的,我写的是“你必须复制那个图像,否则你无法使用这个图像”。
    • 我不需要复制这些图像。我们的服务器上已经有了图像,因为我们确实创建了它们。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多