资讯专栏INFORMATION COLUMN

php上传图片到微博图床

mudiyouyou / 2719人阅读

摘要:今天就用来上传图片到微博,这也是来自的一个问题里面还提到一个版本有种方式实现上传图片如果要用这个的话参数必须是,值为经过编码后的字符串。使用上传登录微博获取就是微博图片,访问即可打开图片这里我上传的是的广告图。

微博是个好图床,上传后就可以通过一个url来访问了。今天就用php来上传图片到微博,这也是来自sf的一个问题, 里面还提到一个python版本.

有2种方式实现上传图片:

如果要用 http://picupload.service.weib... 这个 URL 的话POST 参数必须是 b64_data,值为经过 base64 编码后的字符串。

如果要使用 pic1 参数的话,则要用 multipart 方式进行上传,且 URL 中必须包含 cb 参数,cb 参数的值为 http://weibo.com/aj/static/up... 加(js)时间戳

以下为php实现,感谢这个问题下@consatan 的回复,这里做个总结。

使用base64上传
$cookie = "your cookie";//登录微博network获取
$ch = curl_init("http://picupload.service.weibo.com/interface/pic_upload.php"
    . "?mime=image%2Fjpeg&data=base64&url=0&markpos=1&logo=&nick=0&marks=1&app=miniblog");

curl_setopt_array($ch, [
    CURLOPT_POST => true,
    CURLOPT_VERBOSE => true,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER => ["Cookie: $cookie"],
    CURLOPT_POSTFIELDS => ["b64_data" => base64_encode(file_get_contents("./sf.jpg"))],
]);

$res = curl_exec($ch);
curl_close($ch);
print_r($res);
/*
{"code":"A00006","data":{"count":1,"data":"eyJ1aWQiOjMyNDMwMjYyMzcsImFwcCI6Im1pbmlibG9nIiwiY291bnQiOjEsInRpbWUiOjE0ODc3NDIyMDYuMzIxLCJwaWNzIjp7InBpY18xIjp7IndpZHRoIjo1MTAsInNpemUiOjUyOTMzLCJyZXQiOjEsImhlaWdodCI6MzMwLCJuYW1lIjoicGljXzEiLCJwaWQiOiJjMTRjYTczZGx5MWZjejcxejNyN25qMjBlNjA5NnE1ZiJ9fX0=","pics":{"pic_1":{"width":510,"size":52933,"ret":1,"height":330,"name":"pic_1","pid":"c14ca73dly1fcz71z3r7nj20e6096q5f"}}}}
$data=base64_decode($res["data"]["data"])
{"uid":3243026237,"app":"miniblog","count":1,"time":1487742206.321,"pics":{"pic_1":{"width":510,"size":52933,"ret":1,"height":330,"name":"pic_1","pid":"c14ca73dly1fcz71z3r7nj20e6096q5f"}}}
*/
//c14ca73dly1fcz71z3r7nj20e6096q5f就是微博图片id,访问http://ww3.sinaimg.cn/large/c14ca73dly1fcz39h7mo3j20e6096q5f即可打开图片,这里我上传的是sf的广告图。

multipart 方式上传
$cookie = "your cookie";//登录微博network获取
$post_data["pic1"]=new CURLFile(realpath("sf.jpg"));
$time=substr(strval(microtime(true) * 1000), 0, 13) . 1;
        $url="http://picupload.service.weibo.com/interface/pic_upload.php?mime=image%2Fjpeg&data=base64&url=0&markpos=1&logo=&nick=0&marks=1&app=miniblog&cb=http://weibo.com/aj/static/upimgback.html?_wv=5&callback=STK_ijax_".time();
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_COOKIE, $cookie); 
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
//multipart 方式上传需要注意传递的参数是数组,不是字符串
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);
//curl_setopt($ch, CURLOPT_HEADER, 1);
// curl_setopt($ch, CURLOPT_NOBODY, 0);
$output = curl_exec($ch);
$rinfo=curl_getinfo($ch); 
print_r($output);
curl_close($ch);
/*
{"code":"A20001","data":{"count":2,"data":"eyJ1aWQiOjMyNDMwMjYyMzcsImFwcCI6Im1pbmlibG9nIiwiY291bnQiOjIsInRpbWUiOjE0ODc3MzQzMzUuNDU3LCJwaWNzIjp7InBpY18yIjp7InJldCI6LTIsIm5hbWUiOiJwaWNfMiJ9LCJwaWNfMSI6eyJ3aWR0aCI6NTEwLCJzaXplIjo1MjkzMywicmV0IjoxLCJoZWlnaHQiOjMzMCwibmFtZSI6InBpY18xIiwicGlkIjoiYzE0Y2E3M2RseTFmY3ozOWg3bW8zajIwZTYwOTZxNWYifX19","pics":{"pic_2":{"ret":-2,"name":"pic_2"},"pic_1":{"width":510,"size":52933,"ret":1,"height":330,"name":"pic_1","pid":"c14ca73dly1fcz39h7mo3j20e6096q5f"}}}} 
*/
//从结果中获取pid即可,这里发现上传同一张图片返回的pid是相同的,看来微博有处理,也许是比较文件的md5.

这里需要注意php不同版本上传图片的处理,参考这个链接 ,传统上,PHP的cURL支持通过在数组数据中,使用“@+文件全路径”的语法附加文件,供cURL读取上传,但PHP从5.5开始引入了新的CURLFile类用来指向文件,所以做个处理:

if (class_exists("CURLFile")) {
    $field = array("fieldname" => new CURLFile(realpath($filepath)));
} else {
    $field = array("fieldname" => "@" . realpath($filepath));
}

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/22421.html

相关文章

  • 借助诗词API和微博图搭建自动发图文微博机器人

    摘要:微博图床对于微博图床的理解得力于这篇文章利用微博当图床语言实现。源码如下上传图片到微博图床图片文件图片是否采用方式上传返回的数据微博提交正则表达式提取返回结果中的数据微博机器人源码列举了所要用到的几个重要,最后还是贴一下机器人的源码吧。 ​ 在2011年的时候,浙大的一位博士生借助微博的开放平台为他实验室的一台饮水机弄了个微博,名唤@浙大CCNT实验室饮水机,俗称饮水机娘。当年这...

    沈建明 评论0 收藏0
  • 使用node搭建自动发图文微博机器人

    摘要:仅供学习交流,请勿用于商业用途,并遵守新浪微博相关规定。代码目录此微博机器人的实现功能如下模拟登陆新浪微博获取自动上传图片至微博图床自动发送内容不同的图文微博通过定时任务,实现周期性发微博任务。 仅供学习交流,请勿用于商业用途,并遵守新浪微博相关规定。 代码目录 showImg(https://segmentfault.com/img/bVbqe6W?w=634&h=580); 此微博...

    Profeel 评论0 收藏0
  • 独立开发变现周刊(第 21 期):辞职后做了3个产品,终于不用回去上班了

    摘要:个月后,我通过个产品达到了万美元的月收入。其中第一个产品贡献了收入的以上。 .markdown-body{word-break:break-word;line-height:1.75;font-weight:400;font-size:15px;overflow-x:hidden;color:#333}.markdown-body h1,.markdown-body h2,.markdow...

    FuisonDesign 评论0 收藏0
  • 开箱即用-简洁实用的ImgURL图相册程序和Zdir目录列表程序(文件管理器)

    摘要:本篇文章就来分享一下两款开箱即用上手容易的图床相册程序和在线文件管理器目录列表程序,由好友开发并维护,非常适合个人站长用作图床相册和文件下载分享。虽然说现在照片还有文件存储等都可以上传到网盘中,但是国内的网盘与国外的网盘存储还有点不一样。以百度网盘与Dropbox对比为例,百度网盘顶多算是一个个人用来存放私人照片和文件的网络硬盘,如果用来分享的话很容易被百度限制或者取消下载。很多的个人站长为...

    番茄西红柿 评论0 收藏2637

发表评论

0条评论

mudiyouyou

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<