我能';不要在Nim中使用twitter api

我能';不要在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

我想在Nim中使用twitter api。 但是,我不能解决这个错误

{“错误”:[{“代码”:85,“消息”:“列表验证失败:列表名称不能为空。”}]}

我成功认证了

我在使用twitter API或 使用Nim库oauth1, 发送邮件的方法

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
这是相同的错误。