与Tumblr API集成的经典ASP

问题描述:

尝试将经典ASP与Tumblr API集成。我想自动化Tumblr编写API以及经典ASP网站的帖子。 Tumblr API位于:http://www.tumblr.com/docs/en/api与Tumblr API集成的经典ASP

这是写Tumblr API的PHP示例。

// Authorization info 
$tumblr_email = '[email protected]'; 
$tumblr_password = 'secret'; 

// Data for new record 
$post_type = 'regular'; 
$post_title = 'The post title'; 
$post_body = 'This is the body of the post.'; 

// Prepare POST request 
$request_data = http_build_query( 
    array( 
     'email'  => $tumblr_email, 
     'password' => $tumblr_password, 
     'type'  => $post_type, 
     'title'  => $post_title, 
     'body'  => $post_body, 
     'generator' => 'API example' 
    ) 
); 

// Send the POST request (with cURL) 
$c = curl_init('http://www.tumblr.com/api/write'); 
curl_setopt($c, CURLOPT_POST, true); 
curl_setopt($c, CURLOPT_POSTFIELDS, $request_data); 
curl_setopt($c, CURLOPT_RETURNTRANSFER, true); 
$result = curl_exec($c); 
$status = curl_getinfo($c, CURLINFO_HTTP_CODE); 
curl_close($c); 

// Check for success 
if ($status == 201) { 
    echo "Success! The new post ID is $result.\n"; 
} else if ($status == 403) { 
    echo 'Bad email or password'; 
} else { 
    echo "Error: $result\n"; 
} 

我试图翻译成ASP。我需要知道如何从页面获取状态。即使有一个提示开始会很好。一个解决方案,甚至更好。我已经得到了这么远与传统的ASP和微软XMLHttpObject:

' Authorization info 
tumblr_email = "[email protected]" 
tumblr_password = "secret" 

' Data for new record 
post_type = "regular" 
post_title = "The post title" 
post_body = "This is the body of the post." 

' Prepare POST request 
request_data = "email=" tumblr_email & "&" & 
request_data = request_data & "password=" & tumblr_password & "&" & 
request_data = request_data & "type=" & post_type & "&" & 
request_data = request_data & "title=" & post_title & "&" & 
request_data = request_data & "body=" & post_body & "&" & 
request_data = request_data & "generator=Your Generator Name" 

request_data = server.urlencode(request_data) 

Dim objHttp, strQuery 
strQuery = “http://www.tumblr.com/api/write” 
set objHttp = Server.CreateObject(“Msxml2.ServerXMLHTTP”) 
objHttp.open “GET”, strQuery, false 
objHttp.send 
Response.Write objHttp.ResponseText 
Set objHttp = Nothing 

下面是正确的代码,经过反复试验,对于一个普通岗位的tumblr使用传统的ASP。感谢https://*.com/users/69820/oracle-certified-professional的帮助。

' Authorization info 
tumblr_email = "your_registered_email" 
tumblr_password = "your_tumblr_password" 

' Data for new record 
post_type = "regular" 
post_title = "The post title" 
post_body = "This is the body of the post." 

' Prepare POST request 
request_data = "email=" & tumblr_email & "&" 
request_data = request_data & "password=" & tumblr_password & "&" 
request_data = request_data & "type=" & post_type & "&" 
request_data = request_data & "title=" & server.urlencode(post_title) & "&" 
request_data = request_data & "body=" & server.urlencode(post_body) 

set http = CreateObject("MSXML2.ServerXMLHTTP") 
http.open "POST", "http://www.tumblr.com/api/write", false 
http.setRequestHeader "Content-type", "application/x-www-form-urlencoded" 
http.setRequestHeader "Content-length", len(content) 
http.setRequestHeader "Connection", "close" 
http.send request_data 
Response.Write http.responseText 

我会加入对的tumblr帖子(照片,报价等)上http://www.genxts.com几天其他例子。

要通过传统的ASP运行POST请求,所有你需要做的就是使用MSXML2库(如你在IE阿贾克斯做):

建立你的请求数据作为一个URL字符串相同的方式,你为GET创建buid参数。确保它是urlencoded

dim request_data: request_data = "key1=value1&key2=value2" 

创建请求对象并通过post连接到url。第三个参数决定呼叫是否同步。想必你所需要的对象的服务器版本,而不是标准的MSXML2.XMLHTTP对象

dim http: set http = CreateObject("MSXML2.ServerXMLHTTP") 
http.open "POST", "http://www.tumblr.com/api/write", false 

组需要

http.setRequestHeader "Content-type", "..." 

请求数据添加到请求

http.send request_data 
任何HTTP请求头

然后您可以通过

dim text: text = http.responseText 

dim xml: set xml = http.responseXML 

取决于数据您传回类型。这里有一个方便的链接:http://msdn.microsoft.com/en-us/library/ms754586(v=VS.85).aspx


好吧,我设法得到这个工作

dim http: set http = CreateObject("MSXML2.ServerXMLHTTP") 

dim email: email = "[email protected]" 
dim password: password = "*password" 
dim content: content = content & "type=regular" 
content = content & "&body=this is a test" 

content = content & "&email=" & email 
content = content & "&password=" & password 



http.open "POST", "http://www.tumblr.com/api/write", false 
http.setRequestHeader "Content-type", "application/x-www-form-urlencoded" 
http.setRequestHeader "Content-length", len(content) 
http.setRequestHeader "Connection", "close" 

http.send content 
Response.Write http.responseText 

看来它不喜欢的URL编码。我尝试了编码的其他内容不是电子邮件&密码

content = Server.URLEncode(content) 
content = content & "&email=" & email 
content = content & "&password=" & password 

,但我得到了一个“后不能为空”的消息

+0

内容类型,我应该用什么呢?我想我越来越近,因为我得到了“授权失败”作为文本响应。无论如何翻译此页面(http://zh.efreedom.com/Question/1-2326071/Sending-POST-Request-Cocoa-Tumblr)到上面的经典ASP示例。由于Tumblr API没有提供实际的特定错误消息,因此这只是试验和错误。 – Patriotec 2010-12-07 23:11:28