Statuses/upload

跳转到: 导航, 搜索

目录

statuses/upload

发表图片微博消息。请求必须用POST方式提交。目前上传图片大小限制为<5M。

URL

http://api.t.sina.com.cn/statuses/upload.(json%7Cxml)

支持格式

XML/JSON

HTTP请求方式

POST

是否需要登录

true
关于授权机制,参见授权机制声明

请求数限制

true
关于请求数限制,参见接口访问权限说明

请求参数

  必选 类型及范围 说明
source true string 申请应用时分配的AppKey,调用接口时候代表应用的唯一身份。(采用OAuth授权方式不需要此参数)
status true string 要发布的微博消息文本内容
pic true binary 要上传的图片。仅支持JPEG,GIF,PNG图片,为空返回400错误。目前上传图片大小限制为<5M。
lat false float 纬度。有效范围:-90.0到+90.0,+表示北纬。
long false float 经度。有效范围:-180.0到+180.0,+表示东经。
注意:lat和long参数需配合使用,用于标记发表微博消息时所在的地理位置,只有用户设置中geo_enabled=true时候地理位置信息才有效。

注意事项

  • 采用multipart/form-data编码方式提交,可以参考: Form-based File Upload in HTML
  • 如果使用的Oauth认证,图片参数pic不参与签名。

返回结果

XML示例

<?xml version="1.0" encoding="UTF-8"?>
<status>
  <id>8374590857</id>
  <text>博客已老 围脖当道 http://sinaurl.cn/hMxBc </text>
  <source>
    <a href="http://t.sina.com.cn">Web</a>
  </source>
  <favorited>false</favorited>
  <truncated>false</truncated>
  <created_at>Tue Nov 17 20:11:24 +0800 2009</created_at>
  <user>
    <id>10503</id>
    <screen_name>timyang</screen_name>
    <name>Tim Yang</name>
    <location>广州</location>
    <description>blog: timyang.net</description>
    <url>http://timyang.net</url>
    <profile_image_url>http://tt8.sinaimg.cn/10503/50/1256306049</profile_image_url>
    <followers_count>0</followers_count>
    <friends_count>0</friends_count>
    <statuses_count>0</statuses_count>
    <favourites_count>0</favourites_count>
  </user>
</status>

JSON示例

 {"created_at":"Thu Jan 07 10:51:19 +0800 2010",
   "id":142296,
   "text":"http://sinaurl.cn/hi4sD",
   "source":"<a id=\"0\" href=\"http://t.sina.com.cn/\" rel=\"nofollow\">Web</a>",
   "favorited":false,
   "truncated":false,
   "in_reply_to_status_id":"",
   "in_reply_to_user_id":"",
   "in_reply_to_screen_name":"",
   "thumbnail_pic":"http://static12.photo.sina.com.cn/thumbnail/5219ba9d072da9d51f7bb",
   "bmiddle_pic":"http://static12.photo.sina.com.cn/bmiddle/5219ba9d072da9d51f7bb",
   "original_pic":"http://static12.photo.sina.com.cn/orignal/5219ba9d072da9d51f7bb",
   "geo":null,
   "user":
        {"id":11075,
        "screen_name":"name_11075",
        "name":"name_11075",
        "province":"0",
        "city":"0",
        "location":"",
        "description":"",
        "url":"",
        "profile_image_url":"http://tp4.sinaimg.cn/11075/50/0",
        "domain":"11075",
        "followers_count":28,
        "friends_count":50,
        "statuses_count":0,
        "favourites_count":29,
        "created_at":"Thu Jan 01 08:00:00 +0800 1970",
        "following":false,
        "geo_enabled":false,
        "verified":true}
   }

其他

Java示例

请从 微博SDK开发包下载 下载Java SDK 参看 examples/OauthUpload.java, 运行 java OauthUpload accesstoken accesstoken_secret filepath 代码示意如下

        public static void main(String[] args) {
		try {
			if (args.length < 3) {
	            System.out.println(
	                "Usage: java weibo4j.examples.OAuthUploadByFile token tokenSecret filePath");
	            System.exit( -1);
	        }
			
			System.setProperty("weibo4j.oauth.consumerKey", Weibo.CONSUMER_KEY);
			System.setProperty("weibo4j.oauth.consumerSecret", Weibo.CONSUMER_SECRET);

			Weibo weibo = new Weibo();
			
			/*
			 * 此处需要填写AccessToken的key和Secret
                        */
			weibo.setToken(args[0], args[1]);
			try {
				File file=new File(args[2]);
				String msg = URLEncoder.encode("中文内容", "UTF-8");
				Status status = weibo.uploadStatus(msg, file);

				System.out.println("Successfully upload the status to ["
						+ status.getText() + "].");
				
			} catch (Exception e1) {
				e1.printStackTrace();
			}
		} catch (Exception ioe) {
			System.out.println("Failed to read the system input.");
		}
	}

PHP示例

请从 微博SDK开发包下载 处下载PHP SDK(支持OAuth验证之版本)
代码示例如下:

<?php
$boundary = uniqid('------------------');
$MPboundary = '--'.$boundary;
$endMPboundary = $MPboundary. '--';

// 需要上传的图片所在路径
$filename = '/tmp/wiki.png';
$file = file_get_contents($filename);

$multipartbody .= $MPboundary . "\r\n";
$multipartbody .= 'Content-Disposition: form-data; name="pic"; filename="wiki.png"'. "\r\n";
$multipartbody .= 'Content-Type: image/png'. "\r\n\r\n";
$multipartbody .= $file. "\r\n";

$k = "source";
// 这里改成 appkey
$v = "appkey";
$multipartbody .= $MPboundary . "\r\n";
$multipartbody.='content-disposition: form-data; name="'.$k."\"\r\n\r\n";
$multipartbody.=$v."\r\n";

$k = "status";
$v = "要上传的文件,这里是描述文字";
$multipartbody .= $MPboundary . "\r\n";
$multipartbody.='content-disposition: form-data; name="'.$k."\"\r\n\r\n";
$multipartbody.=$v."\r\n";
$multipartbody .= "\r\n". $endMPboundary;

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'http://api.t.sina.com.cn/statuses/upload.xml' );
curl_setopt($ch , CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS,$multipartbody );
curl_setopt($ch, CURLOPT_HTTPHEADER, array("Content-Type: multipart/form-data; boundary=$boundary"));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
// 修改成当前用户名及密码
curl_setopt($ch, CURLOPT_USERPWD, "username:password");
$msg = curl_exec($ch);
//echo $multipartbody;
echo 'ok.';
?>

其他语言

可参考以下测试方式,将以下代码存成HTML,在微博登录的情况下用浏览器打开此页面可以上传图片,通过比较浏览器的调用参数来调整你的程序。(可以使用HttpWatch, FireBug等工具监测HTTP传送数据)。注意将下面代码中appkey改成真实值。