利用facebook graph api发送图片

工作环境为mac
目的:尝试使用facebook提供的api发送图片
facebook有个开发者网站https://developers.facebook.com
本人尝试过两种方式利用facebook提供的api发送图片:
1.通过facebook提供的图谱api探索工具
2.通过post方式发送
使用探索工具只实现了发送url图片,没有发送成功本地图片,通过post方式将url图片和本地图片都发送成功

一、利用图谱api探索工具发送图片(该方法怎么传本地图片还未知)
1.你得有个翻墙工具,登陆即可
2.打开图谱api探索工具,并登陆自己的facebook账号
1)点击获取口令,选取相应的用户权限,我选的权限如下图所示(如果只传图片可以不用选那么多,但是按我的选也没啥事),选取完成后在访问口令一栏自动添加好了访问口令
"”/
2)在访问口令下面有一栏,设置如下图所示(选择get就是利用api获取信息,选择post就是利用api发送信息,我们要发送则选择post,post后面的v2.10是api版本,目前最新版是v2.10,版本号后面接要发送内容的地址,/me facebook会自动解析成用户uid)
"”/
3)在post下面一栏有个add field,点击,出现连个文本框,一个是name,一个是value,name可以随便填写(因为我上传的是url图片,所以就写url),value写的是要上传的图片,这个可以百度图片搜一个。
4)点击提交,等待响应完成并返回响应如下图所示,如果没有报错说明上传成功,可以登陆自己的facebook查看上传图片
"”/

二、利用post方式发送图片(这种方式实现了传url图片和本地图片两种)
这种方式使用的是linux下的curl命令来post图片,而且这种方法得知道代理服务器的地址和端口
1.你得有个翻墙工具,登陆,然后查询服务器的地址和端口号,方法如下:
1)我用的某vpn通过shadowsocks登陆,登陆后点击shadowsocks,如下图所示,选择偏好设置
"”/
2)点击HTTP,查看HTTP代理监听地址和HTTP代理监听端口(我的是默认的,如图为127.0.0.1:1087)
"”/
2.利用linux的curl命令按照http的post方法发送图片

使用curl -v -L -x 127.0.0.1:1087 www.facebook.com查看是否翻墙成功,是否能访问facebook,其中-L表示使用地址重定向,如果不用的话,这条语句会出现302的错误,如果执行完该语句输出一堆数据没报错,说明能访问成功。

1)传url图片
下面代码,-v是打印信息,-x是使用代理服务器,-H是自定义头信息传递给服务器(facebook要求Content-Type:multipart/form-data数据形式发送图片),-d是HTTP POST方式传送数据,url=后面是接的要上传的图片的url,access_token=后面接的是访问口令(访问口令的生成方式可以利用图谱api探索工具生成,即同一中的访问口令生成步骤),最后的链接为上传的服务器地址

curl -v \
 -x 127.0.0.1:1087 \
 -H "Content-Type:multipart/form-data" \
 -d "url=https://f10.baidu.com/it/u=2020341049,3982319633&fm=72" \
 -d "caption=test%20photo%20upload" \
 -d "access_token=EAACEdEose0cBAJ23MJN2e6qakHgZBb6f7jS0yZCSVhQsc6qJeDK64N6axx9FD24rIiJoMZBVRcDuvVx2ZCchEychdMlZCYY4ML5ZBUO7igZCsuwZAKKP6ZCGpcb4lWl9hwO5SZCNtKA99BmglxCiAiVT8dd3Tsls7XNIsxHiS6ZBEZBIC0tgV5703v3Hp0Ko7XFUZBeFGEmUK1qmHFQZDZD" \
 "https://graph.facebook.com/v2.10/me/photos"

提示:使用curl -x时,若报错curl:(35)server aborted the ssl handshake错误,在.bash_profile文件中添加下面两行:

export http_proxy=http://<proxy_url>:<proxy_port>/
export https_proxy=https://<proxy_url>:<proxy_port>/

2)传本地图片
下面代码中-F是模拟http表单提交数据,同上传数据类型要是Content-Type:multipart/form-data,因为我想尝试传全景图则要设置allow_spherical_photo=1,filename=@后面接的是待上传的本地图片,最后的链接为上传的服务器地址

curl -v \
 -x 127.0.0.1:1087 \ 
 -H "Content-Type:multipart/form-data" \
 -F "allow_spherical_photo=1" 
 -F "access_token=EAACEdEose0cBAJ23MJN2e6qakHgZBb6f7jS0yZCSVhQsc6qJeDK64N6axx9FD24rIiJoMZBVRcDuvVx2ZCchEychdMlZCYY4ML5ZBUO7igZCsuwZAKKP6ZCGpcb4lWl9hwO5SZCNtKA99BmglxCiAiVT8dd3Tsls7XNIsxHiS6ZBEZBIC0tgV5703v3Hp0Ko7XFUZBeFGEmUK1qmHFQZDZD" \ 
 -F "filename=@/Users/liuheng/Desktop/facebook/2_1_make.jpg"  "https://graph.facebook.com/v2.10/me/photos"

还有一点要提醒的就行,如果要抓包,利用shadowsocks和charles环境的话,可以看文章 mac+charles抓国外的https协议,然后二步骤中的代理服务器地址和端口要改成charles的,我的charles地址是127.0.0.1端口是8888,那么我的写法就是

curl -v \
 -x 127.0.0.1:8888 \ 
 -H "Content-Type:multipart/form-data" \
 -F "allow_spherical_photo=1" 
 -F "access_token=EAACEdEose0cBAJ23MJN2e6qakHgZBb6f7jS0yZCSVhQsc6qJeDK64N6axx9FD24rIiJoMZBVRcDuvVx2ZCchEychdMlZCYY4ML5ZBUO7igZCsuwZAKKP6ZCGpcb4lWl9hwO5SZCNtKA99BmglxCiAiVT8dd3Tsls7XNIsxHiS6ZBEZBIC0tgV5703v3Hp0Ko7XFUZBeFGEmUK1qmHFQZDZD" \ 
 -F "filename=@/Users/liuheng/Desktop/facebook/2_1_make.jpg"  "https://graph.facebook.com/v2.10/me/photos"

研究的就这么多,有什么要改进的,或者有什么新的方式可以留言讨论,下面是一些相关文档
图谱api的使用可以看图谱api文档(https://developers.facebook.com/docs/graph-api
上传图片方式可以参考官方文档:
(1)https://developers.facebook.com/docs/graph-api/reference/user/photos/#publish
(2)https://developers.facebook.com/docs/graph-api/photo-uploads

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值