Foxtable(狐表)用户栏目专家坐堂 → [求助]这个api怎么写?


  共有3445人关注过本帖树形打印复制链接

主题:[求助]这个api怎么写?

帅哥哟,离线,有人找我吗?
zto001
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:六尾狐 帖子:1490 积分:10607 威望:0 精华:0 注册:2018/10/16 11:42:00
[求助]这个api怎么写?  发帖心情 Post By:2020/11/17 16:44:00 [只看该作者]

[求助]这个api怎么写?



Dim hc As New HttpClient("http://api.map.baidu.com/place/v2/search?")
hc.c
hc.Timeout = 5 '设置超时为5秒
Dim jo As new JObject
jo("query") = "关键词"
jo("region") = "行政区划"
jo("ak") = "ak"
jo("sn") = "sn"
jo("timestamp") = "时间戳"
hc.Content = jo.ToString
Dim ret As String = hc.GetData()
MessageBox.Show(ret)

是这样吗?
[此贴子已经被作者于2020/11/17 16:56:20编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
zto001
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:六尾狐 帖子:1490 积分:10607 威望:0 精华:0 注册:2018/10/16 11:42:00
  发帖心情 Post By:2020/11/17 16:57:00 [只看该作者]

编码说明

API请求中需要用到中文或一些特殊字符的参数,为了避免提交到后台乱码,需要对这几个参数值进行编码处理,转换成UTF-8字符的二字符十六进制值,凡是不在下表中的字符都需要进行编码。

字符集合字符
URL非保留字a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 - _ . ~
URL保留字 ! * ' ( ) ; : @ & = + $ , / ? % # [ ]

如果中文参数中使用URL保留字字符的字面意思,例如,检索关键字包含一个问号,此问号也必须进行编码。附注:

javascript中一般采用encodeURIComponent函数对特殊字符进行编码。

Java中可以使用函数URLEncoder.encode对特殊字符进行编码。

C#中可以使用函数HttpUtility.UrlEncode对特殊字符进行编码。

php中可以使用函数urlencode对特殊字符进行编码。


sn计算算法

假设ak=yourak(yourak为一个字符串),

在 API控制台 中配置了该ak的验证方式是sn签名的验证方式,点击下面那排星号,显示Security Key,可以看到此ak对应的sk私钥,假设sk=yoursk。

请求的url是:


http://api.map.baidu.com/geocoder/v2/?address=百度大厦&output=json&ak=yourak&sn=7de5a22212ffaa9e326444c75a58f9a0
//后面的sn就是要计算的,sk不需要在url里出现,但是在计算sn的时候需要sk(假设sk=yoursk) 下面提供java、PHP、C#、python 2.7的参考代码。

 回到顶部
帅哥哟,离线,有人找我吗?
zto001
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:六尾狐 帖子:1490 积分:10607 威望:0 精华:0 注册:2018/10/16 11:42:00
  发帖心情 Post By:2020/11/17 16:58:00 [只看该作者]

这一步不是太懂

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:111427 积分:567211 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2020/11/17 17:38:00 [只看该作者]

这种是get模式,直接拼字符串 
Dim hc As New HttpClient("http://api.map.baidu.com/place/v2/search?query=天安门&region=北京&city_limit=true&output=json&ak=你的ak")
Dim ret As String = hc.GetData()
MessageBox.Show(ret)

 回到顶部
帅哥哟,离线,有人找我吗?
zto001
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:六尾狐 帖子:1490 积分:10607 威望:0 精华:0 注册:2018/10/16 11:42:00
  发帖心情 Post By:2020/11/18 21:55:00 [只看该作者]

sn的计算方法

是要哪种方法转成狐表能写的代码

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:111427 积分:567211 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2020/11/19 8:44:00 [只看该作者]

看c#的代码。转换为vb.net参考:http://converter.telerik.com/

 回到顶部
帅哥哟,离线,有人找我吗?
zto001
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:六尾狐 帖子:1490 积分:10607 威望:0 精华:0 注册:2018/10/16 11:42:00
  发帖心情 Post By:2020/11/19 14:02:00 [只看该作者]

Imports System
Imports System.Collections.Generic
Imports System.Linq
Imports System.Text

Public Class AKSNCaculater
    Private Shared Function MD5(ByVal password As String) As String
        Dim textBytes As Byte() = System.Text.Encoding.UTF8.GetBytes(password)

        Try
            Dim cryptHandler As System.Security.Cryptography.MD5CryptoServiceProvider
            cryptHandler = New System.Security.Cryptography.MD5CryptoServiceProvider()
            Dim hash As Byte() = cryptHandler.ComputeHash(textBytes)
            Dim ret As String = ""

            For Each a As Byte In hash
                ret += a.ToString("x")
            Next

            Return ret
        Catch
            Throw
        End Try
    End Function

    Private Shared Function UrlEncode(ByVal str As String) As String
        str = System.Web.HttpUtility.UrlEncode(str)
        Dim buf As Byte() = Encoding.ASCII.GetBytes(str)

        For i As Integer = 0 To buf.Length - 1

            If buf(i) = "%"c Then
                If buf(i + 1) >= "a"c Then buf(i + 1) -= 32
                If buf(i + 2) >= "a"c Then buf(i + 2) -= 32
                i += 2
            End If
        Next

        Return Encoding.ASCII.GetString(buf)
    End Function

    Private Shared Function HttpBuildQuery(ByVal querystring_arrays As IDictionary(Of String, String)) As String
        Dim sb As StringBuilder = New StringBuilder()

        For Each item In querystring_arrays
            sb.Append(UrlEncode(item.Key))
            sb.Append("=")
            sb.Append(UrlEncode(item.Value))
            sb.Append("&")
        Next

        sb.Remove(sb.Length - 1, 1)
        Return sb.ToString()
    End Function

    Public Shared Function CaculateAKSN(ByVal ak As String, ByVal sk As String, ByVal url As String, ByVal querystring_arrays As IDictionary(Of String, String)) As String
        Dim queryString = HttpBuildQuery(querystring_arrays)
        Dim str = UrlEncode(url & "?" & queryString & sk)
        Return MD5(str)
    End Function
End Class


转换过来了,是放全局代码还是?
哪里需要修改下

[此贴子已经被作者于2020/11/19 14:02:28编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:111427 积分:567211 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2020/11/19 14:11:00 [只看该作者]

去掉前面4句Imports语句,放到全局代码

调用比如:msgbox(AKSNCaculater.MD5("123456"))

 回到顶部
帅哥哟,离线,有人找我吗?
zto001
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:六尾狐 帖子:1490 积分:10607 威望:0 精华:0 注册:2018/10/16 11:42:00
  发帖心情 Post By:2020/11/19 15:55:00 [只看该作者]

编译错误:没有为类型"Byte"和Char"定义运算符”=”。
错误代码:lf buf(0= "%"c Then

放到全局代码提示这样

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  10楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:111427 积分:567211 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2020/11/19 16:04:00 [只看该作者]

If buf(i) = "%"c Then

改为

If buf(i) = Asc("%") Then

 回到顶部
总数 16 1 2 下一页