微博图床php上传,使用新浪微博图床

该博客介绍了一种使用Python脚本自动化将本地图片上传到新浪微博图床的方法,通过模拟登录、保存cookie,然后利用cookie上传图片并获取图片URL。此脚本简化了手动上传图片的过程,为需要频繁上传图片的用户提供便利。
摘要由CSDN通过智能技术生成

首先感谢新浪微博提供的免费图床(对外链无限制),以及吊炸天的cdn图片加速服务,从此妈妈再也不用担心我的图床不能用了.

图床原理:

访问http://weibo.com/minipublish

使用新浪微博账号登陆

进入到发微博的界面:

55fd50f289c3

点击下方的上传图片按钮,并上传本地图片,上传成功后,会在下方出现一张预览图,打开控制台找到这张图片的url,这就是新浪图床的url.

不需要发布微博,图片只要上传就会存在于图床中

55fd50f289c3

手动上传图片,获取地址,非常繁琐.在这里使用python写了一个上传本地图片并返回图床url的脚本,在使用前,请参看另一篇博客python模拟微博登陆,介绍了如何使用python登陆新浪微博并保存cookie.

在获取到cookie后,就可以使用cookie上传图片,代码如下:

def request_image_url(image_path):

cookie = cookielib.MozillaCookieJar()

cookie.load(cookie_file, ignore_expires=True, ignore_discard=True)

opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookie))

image_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'

b = base64.b64encode(file(image_path).read())

data = urllib.urlencode({'b64_data': b})

result = opener.open(image_url, data).read()

result = re.sub(r"", "", result)

image_result = json.loads(result)

image_id = image_result.get('data').get('pics').get('pic_1').get('pid')

return 'http://ww3.sinaimg.cn/large/%s' % image_id

def get_image(image_path):

url = ''

try:

url = request_image_url(image_path)

except:

try:

username = raw_input("输入新浪微博用户名:")

password = raw_input("输入新浪微博密码:")

nonce, pubkey, servertime, rsakv = pre_login()

form_data = generate_form_data(nonce, pubkey, servertime, rsakv, username, password)

login(form_data)

url = request_image_url(image_path)

except:

print "登录失败,程序退出"

exit()

return url

if __name__ == '__main__':

print get_image('/home/q/hexo/blog/source/img/angular-remove-table-item.jpg')

代码运行结果如下:

/usr/bin/python2.7 /home/q/hexo/blog/weibo_util.py

输入新浪微博用户名: yourusername

输入新浪微博密码:yourpassword

http://ww3.sinaimg.cn/large/b8b708a7gw1f2n0udn29tj210b0b0jsn

输出就是新浪图床的地址.换成你的本地文件来试一试吧.

完整的代码包括了模拟新浪微博登陆,保存cookie,上传本地图片到新浪微博图床并获取图床地址.

使用springboot做基础框架,提供简单页面做图片上传,接口直接模拟微博登陆,上传完成后返回图片保存链接 public String getSinaCookies() { String base64name = Base64Utils.encodeToString(username.getBytes()); String loginUrl = "https://login.sina.com.cn/sso/login.php?client=ssologin.js(v1.4.15)&_=1403138799543"; String params = "entry=sso&gateway=1&from=null&savestate=30&useticket=0&pagerefer;=&vsnf=1&su;=" + base64name; params += "&service=sso&sp;=" + password + "&sr=1920*1080&encoding=UTF-8&cdult=3&domain=sina.com.cn&prelt=0&returntype=TEXT"; //登录 try { URL url = new URL(loginUrl); HttpURLConnection conn = (HttpURLConnection) url.openConnection(); conn.setDoInput(true); conn.setDoOutput(true); conn.setRequestMethod("POST"); OutputStream out = conn.getOutputStream(); out.write(params.getBytes()); out.flush(); out.close(); String sessionId = ""; String cookieVal = ""; String key = null; //取cookie for (int i = 1; (key = conn.getHeaderFieldKey(i)) != null; i++) { if (key.equalsIgnoreCase("set-cookie")) { cookieVal = conn.getHeaderField(i); cookieVal = cookieVal.substring(0, cookieVal.indexOf(";")); sessionId = sessionId + cookieVal + ";"; } } if (sessionId != null) { String[] cookiearr = sessionId.split(";"); for (int i = 0; i < cookiearr.length; i++) { if (cookiearr[i].startsWith("SUB") && !cookiearr[i].startsWith("SUBP")) { sessionId = cookiearr[i] + ";"; } } } return sessionId; } catch (Exception e) { e.printStackTrace(); return null; } }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值