Statuses/upload

跳转到: 导航, 搜索
(请求参数)
 
(未显示6个用户的31个中间版本)
第1行: 第1行:
== statuses/upload ==
+
{{api_desc2|
上传图片及发布微博信息。请求必须用POST方式提交。为防止重复,发布的信息与当前最新信息一样话,将会被忽略。目前上传图片大小限制为<1M。
+
uri=statuses/upload|
 +
desc=发表带图片的微博。必须用POST方式提交pic参数,且Content-Type必须设置为multipart/form-data。图片大小<5M。|
 +
format=XML/JSON|
 +
httpMethod=POST|
 +
needAuth=true|
 +
rateLimit=true|
 +
params={{api_args|status|true|string|要发布的微博文本内容。}}
 +
{{api_args|pic|true|binary|要上传的图片数据。仅支持JPEG、GIF、PNG格式,为空返回400错误。图片大小<5M。 }}
 +
{{api_args|lat|false|float|纬度。有效范围:-90.0到+90.0,+表示北纬。}}
 +
{{api_args|long|false|float|经度。有效范围:-180.0到+180.0,+表示东经。}}
 +
{{api_args_colspan|1=<font style="color:#ee6666">注意:lat和long参数需配合使用,用于标记发表微博消息时所在的地理位置,只有用户设置中geo_enabled=true时候地理位置信息才有效。</font>}}|
 +
getParam=|
 +
postParam=-F "pic=@1.png"  -F "status=分享图片"|
 +
result=
 +
===XML示例===
 +
<pre>
 +
<?xml version="1.0" encoding="UTF-8"?>
 +
  <status>
 +
    <created_at>Thu Dec 02 17:02:42 +0800 2010</created_at>
 +
    <id>4022982531</id>
 +
    <text>abc</text>
 +
    <source>
 +
      <a href="http://open.t.sina.com.cn">微博开放平台接口</a>
 +
    </source>
 +
    <favorited>false</favorited>
 +
    <truncated>false</truncated>
 +
    <geo/>
 +
    <in_reply_to_status_id></in_reply_to_status_id>
 +
    <in_reply_to_user_id></in_reply_to_user_id>
 +
    <in_reply_to_screen_name></in_reply_to_screen_name>
 +
    <thumbnail_pic>http://ww3.sinaimg.cn/thumbnail/6b8527b3jw6dbydoikpzuj.jpg</thumbnail_pic>
 +
    <bmiddle_pic>http://ww3.sinaimg.cn/bmiddle/6b8527b3jw6dbydoikpzuj.jpg</bmiddle_pic>
 +
    <original_pic>http://ww3.sinaimg.cn/large/6b8527b3jw6dbydoikpzuj.jpg</original_pic>
 +
    <user>
 +
      <id>1803888563</id>
 +
      <screen_name>LoopC</screen_name>
 +
      <name>LoopC</name>
 +
      <province>11</province>
 +
      <city>8</city>
 +
      <location>北京 海淀区</location>
 +
      <description></description>
 +
      <url></url>
 +
      <profile_image_url>http://tp4.sinaimg.cn/1803888563/50/0</profile_image_url>
 +
      <domain></domain>
 +
      <gender>m</gender>
 +
      <followers_count>1</followers_count>
 +
      <friends_count>1</friends_count>
 +
      <statuses_count>2</statuses_count>
 +
      <favourites_count>0</favourites_count>
 +
      <created_at>Fri Aug 27 00:00:00 +0800 2010</created_at>
 +
      <following>false</following>
 +
      <verified>false</verified>
 +
      <allow_all_act_msg>false</allow_all_act_msg>
 +
      <geo_enabled>true</geo_enabled>
 +
    </user>
 +
  </status>
 +
</pre>
 +
===JSON示例===
 +
<pre>
 +
{
  
=== URL===
+
    "created_at": "Thu Dec 02 17:06:40 +0800 2010",
curl http://api.t.sina.com.cn/statuses/upload.format
+
    "id": 4023064087,
 +
    "text": "abc",
 +
    "source": "微博开放平台接口",
 +
    "favorited": false,
 +
    "truncated": false,
 +
    "in_reply_to_status_id": "",
 +
    "in_reply_to_user_id": "",
 +
    "in_reply_to_screen_name": "",
 +
    "thumbnail_pic": "http://ww2.sinaimg.cn/thumbnail/6b85067djw6dbydsnam1xj.jpg",
 +
    "bmiddle_pic": "http://ww2.sinaimg.cn/bmiddle/6b85067djw6dbydsnam1xj.jpg",
 +
    "original_pic": "http://ww2.sinaimg.cn/large/6b85067djw6dbydsnam1xj.jpg",
 +
    "geo": {
 +
          "type": "Point",
 +
          "coordinates": [
 +
              39.8765,
 +
              119.5678
 +
            ]
 +
      },
 +
    "user":{
 +
          "id": 1803880061,
 +
          "screen_name": "LoopB",
 +
          "name": "LoopB",
 +
          "province": "11",
 +
          "city": "8",
 +
          "location": "北京 海淀区",
 +
          "description": "",
 +
          "url": "",
 +
          "profile_image_url": "http://tp2.sinaimg.cn/1803880061/50/0/0",
 +
          "domain": "",
 +
          "gender": "f",
 +
          "followers_count": 1,
 +
          "friends_count": 1,
 +
          "statuses_count": 14,
 +
          "favourites_count": 4,
 +
          "created_at": "Fri Aug 27 00:00:00 +0800 2010",
 +
          "following": false,
 +
          "allow_all_act_msg": false,
 +
          "geo_enabled": true,
 +
          "verified": false
 +
      }
 +
}
 +
</pre>|
 +
useAge=
 +
* 上传图片需要采用multipart/form-data方式提交pic参数,并且放在POST请求的body里。另外,只有以oauth_开头的参数才需要参加OAuth的签名。可以参考: [http://www.ietf.org/rfc/rfc1867.txt Form-based File Upload in HTML] 第6段: Examples
 +
*如果不确定如何在发送POST请求中签名,可以参考下面的示例:|
 +
otherInfo=
 +
===Java示例===
 +
请从 [[SDK | 微博SDK开发包下载]] 下载Java SDK
 +
参看 examples/OauthUpload.java, 运行 java OauthUpload accesstoken accesstoken_secret filepath
 +
代码示意如下
 +
<pre>
 +
        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.");
 +
}
 +
}
 +
</pre>
 +
===PHP示例===
 +
请从 [[SDK | 微博SDK开发包下载]] 处下载PHP SDK(支持OAuth验证之版本)<br>
 +
代码示例如下:
 +
<?php
 +
$boundary = uniqid('------------------');
 +
$MPboundary = '--'.$boundary;
 +
$endMPboundary = $MPboundary. '--';
 
   
 
   
=== 格式===
+
// 需要上传的图片所在路径
xml, json
+
$filename = '/tmp/wiki.png';
 +
$file = file_get_contents($filename);
 
   
 
   
=== HTTP请求方式===
+
$multipartbody .= $MPboundary . "\r\n";
POST, 必须用Multipart/form-data方式
+
$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";
true
+
// 这里改成 appkey
 +
$v = "appkey";
 +
$multipartbody .= $MPboundary . "\r\n";
 +
$multipartbody.='content-disposition: form-data; name="'.$k."\"\r\n\r\n";
 +
$multipartbody.=$v."\r\n";
 
   
 
   
=== 请求数限制===
+
$k = "status";
true
+
  $v = "要上传的文件,这里是描述文字";
 
+
  $multipartbody .= $MPboundary . "\r\n";
=== 请求参数===
+
  $multipartbody.='content-disposition: form-data; name="'.$k."\"\r\n\r\n";
* status. 必填参数, 要更新的微博信息。必须做URLEncode,信息内容部超过140个汉字。
+
$multipartbody.=$v."\r\n";
* pic. 必填参数。仅支持JPEG,GIF,PNG图片,为空返回400错误。目前上传图片大小限制为<1M。
+
$multipartbody .= "\r\n". $endMPboundary;
* lat. 可选参数,纬度,发表当前微博所在的地理位置,有效范围 -90.0到+90.0, +表示北纬。只有用户设置中geo_enabled=true时候地理位置才有效。(保留字段,暂不支持)
+
* long. 可选参数,经度。有效范围-180.0到+180.0, +表示东经。(保留字段,暂不支持)
+
$ch = curl_init();
 
+
curl_setopt($ch, CURLOPT_URL, 'http://api.t.sina.com.cn/statuses/upload.xml' );
=== 使用说明===
+
curl_setopt($ch , CURLOPT_POST, 1);
* 如果没有登录或超过发布上限,将返回403错误
+
curl_setopt($ch, CURLOPT_POSTFIELDS,$multipartbody );
* 系统将忽略重复发布的信息。每次发布将比较最后一条发布消息,如果一样将被忽略。因此用户不能连续提交相同信息。发布成功返回发布的信息ID,否则返回为空。
+
curl_setopt($ch, CURLOPT_HTTPHEADER, array("Content-Type: multipart/form-data; boundary=$boundary"));
* 如果使用的Oauth认证,图片参数pic不参与签名。
+
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
 
+
// 修改成当前用户名及密码
=== 返回结果 ===
+
curl_setopt($ch, CURLOPT_USERPWD, "username:password");
XML示例:
+
$msg = curl_exec($ch);
<?xml version="1.0" encoding="UTF-8"?>
+
//echo $multipartbody;
  <status>
+
echo 'ok.';
  <id>8374590857</id>
+
?>
  <text>博客已老 围脖当道 http://sinaurl.cn/hMxBc </text>
+
===其他语言===
  <source>
+
可参考以下测试方式,将以下代码存成HTML,在微博登录的情况下用浏览器打开此页面可以上传图片,通过比较浏览器的调用参数来调整你的程序。(可以使用HttpWatch, FireBug等工具监测HTTP传送数据)。注意将下面代码中appkey改成真实值。
    <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":<br/>        {"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",
+
        "email":"",
+
        "qq":"4102",
+
        "msn":"msn_4102",
+
        "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}
+
    }
+
 
+
=== 使用示例===
+
* xml url:
+
http://api.t.sina.com.cn/statuses/upload.xml
+
* json url:
+
http://api.t.sina.com.cn/statuses/upload.json
+
 
+
可参考以下测试方式,将以下代码存成HTML,在微博登录的情况下用浏览器打开此页面可以上传图片,通过比较浏览器的调用(使用HttpWatch, FireBug等工具监测HTTP传送数据)参数来调整你的程序。注意将下面代码中appkey改成对应真实值。
+
  
 
  <html><head><meta http-equiv="Content-Type" content="text/html;charset=utf8"></head><body>
 
  <html><head><meta http-equiv="Content-Type" content="text/html;charset=utf8"></head><body>
第110行: 第201行:
 
  <input type="hidden" name="source" value="改成你的appkey" />
 
  <input type="hidden" name="source" value="改成你的appkey" />
 
  </form></body></html>
 
  </form></body></html>
 +
}}

2012年9月24日 (一) 11:37的最后版本

目录

statuses/upload

发表带图片的微博。必须用POST方式提交pic参数,且Content-Type必须设置为multipart/form-data。图片大小<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方式提交pic参数,并且放在POST请求的body里。另外,只有以oauth_开头的参数才需要参加OAuth的签名。可以参考: Form-based File Upload in HTML 第6段: Examples
  • 如果不确定如何在发送POST请求中签名,可以参考下面的示例:

返回结果

XML示例

<?xml version="1.0" encoding="UTF-8"?>
  <status>
    <created_at>Thu Dec 02 17:02:42 +0800 2010</created_at>
    <id>4022982531</id>
    <text>abc</text>
    <source>
      <a href="http://open.t.sina.com.cn">微博开放平台接口</a>
    </source>
    <favorited>false</favorited>
    <truncated>false</truncated>
    <geo/>
    <in_reply_to_status_id></in_reply_to_status_id>
    <in_reply_to_user_id></in_reply_to_user_id>
    <in_reply_to_screen_name></in_reply_to_screen_name>
    <thumbnail_pic>http://ww3.sinaimg.cn/thumbnail/6b8527b3jw6dbydoikpzuj.jpg</thumbnail_pic>
    <bmiddle_pic>http://ww3.sinaimg.cn/bmiddle/6b8527b3jw6dbydoikpzuj.jpg</bmiddle_pic>
    <original_pic>http://ww3.sinaimg.cn/large/6b8527b3jw6dbydoikpzuj.jpg</original_pic>
    <user>
      <id>1803888563</id>
      <screen_name>LoopC</screen_name>
      <name>LoopC</name>
      <province>11</province>
      <city>8</city>
      <location>北京 海淀区</location>
      <description></description>
      <url></url>
      <profile_image_url>http://tp4.sinaimg.cn/1803888563/50/0</profile_image_url>
      <domain></domain>
      <gender>m</gender>
      <followers_count>1</followers_count>
      <friends_count>1</friends_count>
      <statuses_count>2</statuses_count>
      <favourites_count>0</favourites_count>
      <created_at>Fri Aug 27 00:00:00 +0800 2010</created_at>
      <following>false</following>
      <verified>false</verified>
      <allow_all_act_msg>false</allow_all_act_msg>
      <geo_enabled>true</geo_enabled>
    </user>
  </status>

JSON示例

{

    "created_at": "Thu Dec 02 17:06:40 +0800 2010",
    "id": 4023064087,
    "text": "abc",
    "source": "微博开放平台接口",
    "favorited": false,
    "truncated": false,
    "in_reply_to_status_id": "",
    "in_reply_to_user_id": "",
    "in_reply_to_screen_name": "",
    "thumbnail_pic": "http://ww2.sinaimg.cn/thumbnail/6b85067djw6dbydsnam1xj.jpg",
    "bmiddle_pic": "http://ww2.sinaimg.cn/bmiddle/6b85067djw6dbydsnam1xj.jpg",
    "original_pic": "http://ww2.sinaimg.cn/large/6b85067djw6dbydsnam1xj.jpg",
    "geo": {
          "type": "Point",
          "coordinates": [
               39.8765,
               119.5678
            ]
      },
    "user":{
          "id": 1803880061,
          "screen_name": "LoopB",
          "name": "LoopB",
          "province": "11",
          "city": "8",
          "location": "北京 海淀区",
          "description": "",
          "url": "",
          "profile_image_url": "http://tp2.sinaimg.cn/1803880061/50/0/0",
          "domain": "",
          "gender": "f",
          "followers_count": 1,
          "friends_count": 1,
          "statuses_count": 14,
          "favourites_count": 4,
          "created_at": "Fri Aug 27 00:00:00 +0800 2010",
          "following": false,
          "allow_all_act_msg": false,
          "geo_enabled": true,
          "verified": false
      }
}

其他

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改成真实值。


 
文档更新时间: 2012-09-24