我正在努力提高我对 VBA 的了解,学习 GET、POST 和其他东西,因为我看过很多例子,但无法理解我做错了什么。可能是 Oauth 部分。
主要问题是我只是一个 Excel 人。我不是网络开发人员,所以我的知识几乎为零,而且可能我错过了很多基本的东西。
我希望这个问题不要太宽泛。
背景:我正在尝试从推文中获取 JSON 对象的 ResponseText。信息是公开的,您无需登录即可查看我想获取的信息,也不需要 Twitter 帐户。
为了测试,我正在使用这条推文:https : //twitter.com/StackOverflow/status/1273391252357201922
我想要什么:使用开发人员工具检查代码(我使用的是 Firefox),我已经看到了:
所以我想将该 ResponseText 放入 VBA。
我的代码:在这里检查不同的代码,我已经建立了这个:
Sub test()
Dim MiHttp As Object
Dim MiUrl As String
Set MiHttp = CreateObject("MSXML2.XMLHTTP")
MiUrl = "https://api.twitter.com/2/timeline/conversation/1273391252357201922.json?include_profile_interstitial_type=1&include_blocking=1&include_blocked_by=1&include_followed_by=1&include_want_retweets=1&include_mute_edge=1&include_can_dm=1&include_can_media_tag=1&skip_status=1&cards_platform=Web-12&include_cards=1&include_ext_alt_text=true&include_reply_count=1&tweet_mode=extended&include_entities=true&include_user_entities=true&include_ext_media_color=true&include_ext_media_availability=true&send_error_codes=true&simple_quoted_tweet=true&count=20&ext=mediaStats%2ChighlightedLabel&include_quote_count=true"
With MiHttp
.Open "GET", MiUrl
.Send
DoEvents
Debug.Print .responseText
End With
MiHttp.abort
Set MiHttp = Nothing
End Sub
Run Code Online (Sandbox Code Playgroud)
它运行,没有编码错误,但我明白了:
{"errors":[{"code":200,"message":"Forbidden."}]}
在之前添加这行代码.Send:
.setRequestHeader …Run Code Online (Sandbox Code Playgroud) 当允许OAuth登录时(例如OpenID,Facebook,Twitter等),我们将誓言提供者提供的访问令牌保存在mysql数据库中以供将来验证.在一些教程中,用于保存访问令牌的列是varchar(255)有用的text.我想知道访问令牌(由常见的网站,如Facebook和Twitter)是否超过255个字符需要text列.我们应该考虑这种可能吗?
我正在尝试使用Oauth模块将图像发布到Twitter.这是我有的:
它引发403错误,我知道我在如何将媒体添加到帖子时做错了但我不知道从哪里开始.
var https = require('https');
var OAuth= require('oauth').OAuth;
var keys = require('./twitterkeys');
var twitterer = new OAuth(
"https://api.twitter.com/oauth/request_token",
"https://api.twitter.com/oauth/access_token",
keys.consumerKey,
keys.consumerSecret,
"1.0",
null,
"HMAC-SHA1"
);
var params = {
status : "Tiger!",
media : [("data:" + mimeType + ";base64,") + fs.readFileSync(path,'base64')]
};
//function(url, oauth_token, oauth_token_secret, post_body, post_content_type, callback)
twitterer.post("https://upload.twitter.com/1/statuses/update_with_media.json",
keys.token, keys.secret, params, "multipart/form-data",
function (error, data, response2) {
if(error){
console.log('Error: Something is wrong.\n'+JSON.stringify(error)+'\n');
}else{
console.log('Twitter status updated.\n');
console.log(response2+'\n');
}
});
Run Code Online (Sandbox Code Playgroud)
这是我相信我要做的事情,但我不知道如何在Node.js Oauth模块中做到这一点. 使用Twitter + OAuth将图片发布到Twitter
我正在尝试使用RestSharp从我的网络应用发布Twitter状态.以下代码完美运行:
var status = "I am fine with posting this status.";
var client = new RestClient("https://api.twitter.com");
// The OAuth keys/tokens/secrets are retrieved elsewhere
client.Authenticator = OAuth1Authenticator.ForProtectedResource(
_consumerKey, _consumerSecret, _accessToken, _accessTokenSecret
);
var request = new RestRequest("/1.1/statuses/update.json", Method.POST);
request.AddParameter("status", status, ParameterType.GetOrPost);
var response = client.Execute(request);
Run Code Online (Sandbox Code Playgroud)
但是,如果我在状态文本中包含以下任何字符,则此代码将失败并出现身份验证错误: ! * ' ( )
通过大量的论坛拖网,我推断这与OAuth签名编码不匹配POST参数的编码有关.我在SO上发现了这个问题,但在GitHub上搜索RestSharp问题却没有任何帮助.
我可以在RestSharp source(UrlEncodeRelaxed)中看到一些代码,这些代码似乎是手动编码符合OAuth编码规范的特定字符集,因此我尝试以相同的方式手动编码我的状态中的这些字符(使用代码来自RestSharp)之前传入它,例如:
var status = "I'm NOT fine with posting this status.";
string[] UriRfc3986CharsToEscape = …Run Code Online (Sandbox Code Playgroud) 我正在使用以下代码返回持票人令牌,但我一直在获取
"远程服务器返回错误:(500)内部服务器错误"在线"WebResponse response = request.GetResponse();"
WebRequest request = WebRequest.Create("https://api.twitter.com/oauth2/token");
string consumerKey = "31111111111111111111";
string consumerSecret = "1111111111111111111111A";
string consumerKeyAndSecret = String.Format("{0}:{1}", consumerKey, consumerSecret);
request.Method = "POST";
request.Headers.Add("Authorization", String.Format("Basic {0}", Convert.ToBase64String(Encoding.Unicode.GetBytes(consumerKeyAndSecret))));
request.ContentType = "application/x-www-form-urlencoded;charset=UTF-8";
string postData = "grant_type=client_credentials";
byte[] byteArray = Encoding.UTF8.GetBytes(postData);
request.ContentLength = byteArray.Length;
Stream dataStream = request.GetRequestStream();
dataStream.Write(byteArray, 0, byteArray.Length);
dataStream.Close();
WebResponse response = request.GetResponse();
Run Code Online (Sandbox Code Playgroud)
任何建议都会很棒
使用Twitter OAuth,用户可以获得以下信息:
我只需要发布推文,是否可以只询问?
Facebook在请求身份验证时支持"范围"参数,但我没有看到类似Twitter的内容: Twitter授权
我正在使用Twitter工具包登录Twitter.登录到Twitter后,我在日志中收到以下错误.
登录代码:
- (IBAction)btnTwitterLogin_pressed:(id)sender
{
[[Twitter sharedInstance] logInWithCompletion:^
(TWTRSession *session, NSError *error) {
if (session)
{
// This session is then used to make Twitter API requests.
NSLog(@"%@", [session userID]);
NSLog(@"%@", [session userName]);
NSLog(@"%@", [session authToken]);
NSLog(@"%@", [session authTokenSecret]);
[self requestUserEmail];
}
else
{
NSLog(@"Error: %@", [error localizedDescription]);
}
}];
}
Run Code Online (Sandbox Code Playgroud)
错误日志:
[TwitterKit] didEncounterError:withMessage:无效参数不满足:错误
我找不到原因.有人遇到过同样的问题吗?
Twitter的API要求发送Authorization标头,该标头是与API密钥连接的API密钥的base64编码.在Node中,我使用:
var base64 = new Buffer(apiKey + ':' + apiSecret).toString('base64');
Run Code Online (Sandbox Code Playgroud)
发送的标头变为:
Authorization: 'Basic ' + base64
Run Code Online (Sandbox Code Playgroud)
base64编码字符串"apiKeyHere:apiSecretHere"有什么意义?为什么不接受包含原始api凭证的Authorization标头?
这个问题类似于base 64编码的目的是什么以及它在HTTP基本身份验证中使用的原因?但投票的答案并没有完全回答我的问题.Twitter的api密钥和api密钥已经是HTTP兼容的字符.他们看起来像这样(这些不是真的):
消费者密钥(API密钥)8dme3utVQfOhlPk5BUG9XbFxR
消费者秘密(API Secret)QFZXoC7MP72JZtGMBNpjLGI4Vl1xr1q9dyPLp3u7jGtkESpbLm
那么为什么base64会编码呢?此外,该帖子指出"编码的目的是将可能在用户名或密码中的非HTTP兼容字符编码为与HTTP兼容的字符." 用户名和密码不是HTTP兼容字符吗?
我正在尝试连接到twitter api的公共流端点.
当我运行示例参数时,我从nodejs中的twitter api测试工具获得我得到的401 unauthorized错误,你可以看到我的nodejs示例请求
'use strict';
const https = require('https');
const qs = require('querystring');
const obj = {
method: "POST",
headers: {
Authorization: 'OAuth oauth_consumer_key="pXZ8xSWvjZjE4UaNntVsCwWPg", oauth_nonce="776f1a4ec0c3ed9ecbfb68aa0f7e2324", oauth_signature="jk8e84V0OcgcepkL7F%2BXt2fAy8o%3D", oauth_signature_method="HMAC-SHA1", oauth_timestamp="1463258508", oauth_token="416282416-vFTMVJCFiRW8G6nwoFhH3OBqrJsKDbIJ93sbOm2a", oauth_version="1.0"'
},
hostname: "stream.twitter.com",
path: "/1.1/statuses/filter.json"
}
https.request(obj,res => {
res.on("data", d => {
console.log(d.toString());
});
}).end(qs.stringify({track:"javascript"}))
Run Code Online (Sandbox Code Playgroud)
但是,如果我发送这个请求curl它完全适用于这里是我的示例curl请求
curl --request 'POST' 'https://stream.twitter.com/1.1/statuses/filter.json' --data 'track=javascript' --header 'Authorization: OAuth oauth_consumer_key="pXZ8xSWvjZjE4UaNntVsCwWPg", oauth_nonce="776f1a4ec0c3ed9ecbfb68aa0f7e2324", oauth_signature="jk8e84V0OcgcepkL7F%2BXt2fAy8o%3D", oauth_signature_method="HMAC-SHA1", oauth_timestamp="1463258508", oauth_token="416282416-vFTMVJCFiRW8G6nwoFhH3OBqrJsKDbIJ93sbOm2a", oauth_version="1.0"' --verbose
Run Code Online (Sandbox Code Playgroud)
我做错了什么?他们完全相同的要求.
最近Twitter工具包将失去支持,我想知道什么是正确和推荐的方式来集成显示搜索的推文推文(使用api本地或一些新的替代品,推特套件)现在和未来.
大多数在线教程已弃用或使用Twitter工具包不能用于Twitter在您的服务上进行的某些更改并且在oAuth上失败.
问题是如何在今年将Twitter与Android Api-28上的新原生api集成
如果有人有样品或开始项目,我会对此进行评估.