是否可以从R会话更新我的Facebook状态?
编辑1:到目前为止阅读回复,我想指出,我只是感兴趣,如果已经存在提供此功能的包,类似于可爱的twitteR包对twitter的作用。此外,为了“有趣”,某些东西不一定是“有用的”,这是我喜欢学习的方式。
编辑2:对于任何被我冒犯的人抱歉,因为我没有更具体地提出我的问题。我已经非正式使用了R 2个月,并被告知SO是一个提问的好地方(是的,我已经阅读了介绍指南)。
答案 0 :(得分:10)
注意:以下只能成功登录到facebook。我不知道为什么最后的状态更新不起作用,但也许它仍然有一些价值。它基于3月份Baratttalo的博客文章,我认为这个帖子将在周五下午过去。
我不打算回答这个问题,但是看看其他一些回复并看到你在mathoverflow上帮助我,我想我会试一试。
你需要安装来自http://www.omegahat.org/的RCurl和XML软件包(这是一个非常酷的网站,我认为它只是为了好玩)。
无论如何复制并粘贴此内容:
library(RCurl)
library(XML)
log.into.facebook <- function(curl, id) {
curlSetOpt( .opts = list(postfields = paste('email=', URLencode(id$login.email), '&pass=', URLencode(id$login.password), '&login=', URLencode('"Login"'), sep=''),
post = TRUE,
header = FALSE,
followlocation = TRUE,
ssl.verifypeer = FALSE,
cookiejar = 'my_cookies.txt',
cookiefile = 'my_cookies.txt',
useragent = 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.3) Gecko/20070309 Firefox/2.0.0.3'), curl = curl)
u <- "https://login.facebook.com/login.php?m&next=http%3A%2F%2Fm.facebook.com%2Fhome.php"
doc <- getURL(u, curl = curl)
return(doc)
}
get.update.stutus.form.id <- function(curl, doc) {
curlSetOpt( .opts = list(post = FALSE), curl = curl)
doc <- getURL("http://m.facebook.com/home.php" , curl = curl)
html <- htmlTreeParse(doc, useInternal = TRUE)
# this gets the post_form_id value
form.id.node <- getNodeSet(html, '//input[@name="post_form_id"]')
form.id <- sapply(form.id.node, function(x) x <- xmlAttrs(x)[[3]])
# we'll also need the exact name of the form processor page
form.num.node <- getNodeSet(html, '//form[@method="post"]')
form.num <- sapply(form.num.node, function(x) x <- xmlAttrs(x)[[1]])
form.num <- strsplit(form.num, "/")[[1]][3]
return(list(form.id = form.id, form.num = form.num))
}
# This function doesn't work. I would love to know why though as it 'looks' right to me
update.status <- function(doc, curl, id) {
form <- get.update.stutus.form.id (curl, doc)
curlSetOpt( .opts = list(post = TRUE,
postfields = paste('post_form_id=', form$form.id, '&status=', URLencode(id$status), '&update=', URLencode('"Update status"'), sep = '')),
curl = curl)
u <- paste("http://m.facebook.com", form$form.num, sep = "/")
doc <- getURL(u, curl = curl)
return(doc)
}
以下是您使用上述功能的方法(将ID值更改为您的登录详情)
id <- list()
id$status <- "Hello world!"
id$login.email <- "YOUR LOGIN EMAIL"
id$login.password <- "YOUR LOGIN PASSWORD"
# log into facebook, seems to work fine
curl <- getCurlHandle()
doc <- log.into.facebook(curl, id)
# this is the bit that doesn't work, no idea why though.
update.status(doc, curl, id)
希望有所帮助,也许它会给你一个想法。另外,我认为你问的问题很好,下次可能会更具体一点,所以也许你会避免一些你在这里得到的评论: - )
Tony Breyal
P.S。我认为这个地方有一个api,但如果你感兴趣的是更新状态,我非常喜欢使用twitteR包并将更新链接到facebook。
答案 1 :(得分:3)
我不这么认为。它需要构建一个软件包来支持Facebook API,没有人为R做过这个。(而且,真的,为什么会这样?它不是最好的工具!而且你不能从Facebook中提取大量数据做数据分析......)
您可以做的是使用twitteR包,在Twitter上更新您的状态,然后连接您的Twitter和Facebook帐户以获取Facebook的更新。
答案 2 :(得分:3)
我必须承认我永远不会想象有人会问这样的问题但是...... :)
使用httpRequest包(http://cran.fiocruz.br/web/packages/httpRequest/index.html)更新您的状态。这只是一个POST。我在R中找不到一个例子,但这里是PHP的一个例子 - 不难看出做了什么:http://fbcookbook.ofhas.in/2009/02/07/facebook-reveals-status-api-how-to-use-it/
答案 3 :(得分:2)
当然,研究API并创建一个包。
如果你的问题真的是“有人已经为我完成了工作吗?”然后答案可能是否定的。
在回应评论时,经典的“这是R.没有if。只有如何。”仍然适用。引自fortunes包:
> library(fortunes)
> fortune("Yoda")
Evelyn Hall: I would like to know how (if) I can extract some of the
information from the summary of my nlme.
Simon Blomberg: This is R. There is no if. Only how.
-- Evelyn Hall and Simon 'Yoda' Blomberg
R-help (April 2005)
>
简而言之,请下载twitteR软件包,了解它如何使用RCurl软件包访问Web API,并为Facebook的API执行此操作。或者付钱给别人为你做。
答案 4 :(得分:2)
现在(2013年12月)可以使用R更新Facebook状态。您只需要使用RFacebook包(http://cran.r-project.org/web/packages/Rfacebook/)。所有你需要的是设置所有内容(这里你有教程 - http://thinktostart.wordpress.com/2013/11/19/analyzing-facebook-with-r/),然后有updateStatus函数,例如:
updateStatus("Here is my new status", token)