我能';不要在Nim中使用twitter api
我想在Nim中使用twitter api。 但是,我不能解决这个错误 {“错误”:[{“代码”:85,“消息”:“列表验证失败:列表名称不能为空。”}]} 我成功认证了 我在使用twitter API或 使用Nim库oauth1, 发送邮件的方法我能';不要在Nim中使用twitter api,twitter,oauth,twitter-oauth,nim-lang,Twitter,Oauth,Twitter Oauth,Nim Lang,我想在Nim中使用twitter api。 但是,我不能解决这个错误 {“错误”:[{“代码”:85,“消息”:“列表验证失败:列表名称不能为空。”}]} 我成功认证了 我在使用twitter API或 使用Nim库oauth1, 发送邮件的方法 import tables, oauth1, strutils, httpclient, json proc parseResponseBody(body: string): Table[string, string] = let response
import tables, oauth1, strutils, httpclient, json
proc parseResponseBody(body: string): Table[string, string] =
let responses = body.split("&")
result = initTable[string, string]()
for res in responses:
let r = res.split("=")
result[r[0]] = r[1]
proc getRequestToken(consumerKey, consumerKeySecret: string): Table[string, string] =
let response = getOAuth1RequestToken(
"https://api.twitter.com/oauth/request_token",
consumerKey,
consumerKeySecret,
isIncludeVersionToHeader = true)
if response.status == "200 OK":
return parseResponseBody(response.body)
else:
assert(false, response.body)
proc getAccessToken(consumerKey, consumerKeySecret, requestToken, requestTokenSecret, verifier: string): Table[string, string] =
let response = getOAuth1AccessToken(
"https://api.twitter.com/oauth/access_token",
consumerKey,
consumerKeySecret,
requestToken,
requestTokenSecret,
verifier,
isIncludeVersionToHeader = true)
if response.status == "200 OK":
return parseResponseBody(response.body)
else:
assert(false, response.body)
let
consumerKey = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
consumerKeySecret = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
let requestToken = getRequestToken(consumerKey, consumerKeySecret)
echo getAuthorizeUrl("https://api.twitter.com/oauth/authorize", requestToken["oauth_token"])
let verifier = readLine(stdin)
let accessTokens = getAccessToken(
consumerKey,
consumerKeySecret,
requestToken["oauth_token"],
requestToken["oauth_token_secret"],
verifier)
let param = %*{"name": "chage","mode": "private","description": "description"}
let response = oauth1Request(
"https://api.twitter.com/1.1/lists/create.json",
consumerKey,
consumerKeySecret,
accessTokens["oauth_token"],
accessTokens["oauth_token_secret"],
httpMethod = HttpPost,
body = $param
)
echo response.body
查看twitterapi,它似乎以查询参数的形式接受输入,而不是JSON主体。这意味着您不需要创建param JSON对象,而需要创建参数字符串。这可以通过简单的连接来完成,但请确保使用类似以下内容来转义URI字符:查看Twitter API,它似乎以查询参数的形式接受输入,而不是JSON主体。这意味着您不需要创建param JSON对象,而需要创建参数字符串。这可以通过简单的连接来完成,但请确保使用类似以下内容来转义URI字符:I know。我试着把它寄出去
let param=“name=chage&mode=private&description=description”。encodeUrl
这是相同的错误。这个URL对整个参数列表进行编码,基本上将其转换为一个键。您需要做的是仅对参数使用encodeUrl。如果您计划像您的示例一样将其用于硬编码字符串,您当然可以将其删除并使用https://api.twitter.com/1.1/lists/create.json?name=chage&mode=private&description=description
谢谢!我成功了。我更改了代码'let param=“name=”和“chage”。encodeUrl&“&mode=”和“private”。encodeUrl&“&description=”和“description”。encodeUrl`并且没有发送body参数。它有示例。你为什么不用它?我知道。我试着把它寄出去let param=“name=chage&mode=private&description=description”。encodeUrl
这是相同的错误。这个URL对整个参数列表进行编码,基本上将其转换为一个键。您需要做的是仅对参数使用encodeUrl。如果您计划像您的示例一样将其用于硬编码字符串,您当然可以将其删除并使用https://api.twitter.com/1.1/lists/create.json?name=chage&mode=private&description=description
谢谢!我成功了。我更改了代码'let param=“name=”和“chage”。encodeUrl&“&mode=”和“private”。encodeUrl&“&description=”和“description”。encodeUrl`并且没有发送body参数。它有示例。你为什么不用它let param=“name=chage&mode=private&description=description”。encodeUrl
这是相同的错误。let param=“name=chage&mode=private&description=description”。encodeUrl
这是相同的错误。