Facebook图谱API换行符

4
我知道这方面已经有很多问题了,但是我想在通过Graph API发布到Facebook墙上的帖子中添加换行符。 我看过各种答案,建议使用<center></center>,但对我不起作用--它只在帖子中打印出“<center></center>”。
具体而言,我正在使用Ruby和Koala gem。 我正在尝试发布到用户的页面。 如果我作为链接发布,并在帖子的描述中尝试中心技巧,则会按预期工作--但在我实际需要它的消息中不起作用。
更新:我向Koala gem提交了一个补丁,允许设置:no_encoding选项。如果/当接受此补丁时,如果将此选项设置为true,则允许换行。就目前而言,遇到此问题的人可以获取我的gem分支:https://github.com/ideaoforder/koala 对于那些好奇的人,问题出在Faraday上。 请求方法设置为:url_encode,这会将参数作为url编码表单数据发送。 参数必须作为常规数据发送,而不是表单数据(例如在cURL中使用-d标志而不是-f标志)。我们通过将数据作为查询字符串的一部分而不是编码参数来实现这一点。
2个回答

4

Facebook对于帖子的要求似乎时常变化,而且文档记录得不是很好。鉴于此,我通过发送以下请求,在消息中创建了换行符的墙贴:

POST https://graph.facebook.com/me/feed?access_token=<token>&message=line+1%0D%0Aline+2

在我的墙上创建以下帖子:

第一行
第二行

重要的是要知道哪些地方进行了URL编码。我的API请求中的message参数包含%0D%0A,这相当于\r\n的转义序列(请参阅此处)。如果你使用的Koala gem正在对你提供的输入进行URL编码,则传递一个带有\r\n转义代码的字符串应该就足够了。

更新:尝试使用命令行程序手动发布帖子可能会很有用。看看是否可以使用以下curl命令使其正常工作:

curl 'https://graph.facebook.com/<wall id>?access_token=<access_token>' -d 'message=this+is+line+1%0D%0Athis+is+line+2'

通常情况下,您需要将墙的ID和访问令牌参数替换为自己的(让您的Ruby程序打印出从Facebook获取的access_token)。您应该会看到一串JSON字符串作为输出:

{"id":"wallid_postid"}

其中wallidpostid是数字。如果您遇到错误,则可能是Facebook或您的应用程序存在权限问题。

权限:如果您要以页面身份发布内容,则您的应用程序必须获得来自页面管理员的manage_pages权限,并且在请求发送时,用户必须当前登录您的应用程序和Facebook,除非您的应用程序还请求了offline_access权限。如果用户未登录,则会收到此响应:

{"error": {
    "type":"GraphMethodException",
    "message":"Unsupported post request."
}}

很不幸,这个问题没有解决。考拉应该对所有内容进行URL编码,但我需要深入代码中查找具体位置和方式。如果我发布到页面的墙上而不是用户的墙上,会有什么区别吗?在图形API中,这些事情处理方式略有不同。 - ideaoforder
我能够使用这种方法在页面上创建一个帖子。你是想以用户身份发布,还是以页面的身份发布?你已经请求了正确的权限/你能否在没有换行符的情况下创建帖子? - jches
如果您能记录Koala正在进行的请求,可能会有所帮助。我使用的应用程序是用Python编写的,因此Koala处理输入的方式可能有所不同。 - jches
当我直接尝试curl请求时,我遇到了一个错误,可能是因为我正在将页面发布到一个页面上:{"error":{"type":"GraphMethodException","message":"Unsupported post request."}}。我浏览了一些Koala代码,并发现了一个CGI.encode函数。我已经删除了它,但仍然没有运气。 - ideaoforder
@ideaoforder:我也在我的应用程序中复制了那个错误 - 你有一个权限问题。请看我添加的注释。 - jches
Chesles,感谢您一直陪伴着我!我终于成功让curl请求工作了——结果是我需要使用数据(-d)标志而不是表单(-f)标志。如果数据以HTTP post的形式传入,则可以正常工作,否则不行(我猜测以查询字符串形式传入的数据会在Graph API端进行编码)。我正在与Koala gem维护者沟通,以确定如何使请求作为post工作。最重要的是,您的解决方案是正确的。一旦我找到了特定于ruby的解决方案,我会回复您。您的建议帮助了我很多! - ideaoforder

2
我也曾经对状态的换行感到困扰。我发现,与其在状态中插入换行符而苦苦挣扎,不如使用笔记,这样可以更加灵活满足你的需求。Facebook页面也可以拥有自己的笔记。只需在你的帐户或页面的URL后面添加?sk=notes,便可看到Facebook的笔记应用程序。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接