多说评论系统API调用和本地身份说明(JWT)

简介: 多说评论系统是一个非常好用的第三方评论插件,聚合了大多数的SNS平台账号登录和分享功能,UI也很不错。 作为网站快速接入评论系统,多说是一个比较好的选择,其也提供了一些实用的API去满足定制化需求。 多说API支持将本地的用户基本信息同步到多说服务器,实现了本地用户系统和多说用户验证机制的一致。

多说评论系统是一个非常好用的第三方评论插件,聚合了大多数的SNS平台账号登录和分享功能,UI也很不错。

作为网站快速接入评论系统,多说是一个比较好的选择,其也提供了一些实用的API去满足定制化需求。

多说API支持将本地的用户基本信息同步到多说服务器,实现了本地用户系统和多说用户验证机制的一致。

大概的过程:在用户注册或者修改个人信息的时候将用户信息同步至多说服务器,并在用户登录后在本地cookie写入JWT值,多说可以进行判断而实现用户无需再登录多说系统就可以进行评论。

Array参数注意点

在使用多说同步用户信息API时,用户的信息users参数的类型为array,这里需要特别注意其格式处理。

不过还是推荐多说团队使用json作为参数格式或者使用新浪微博的处理方式:参数类型为string,多个参数使用逗号分隔,开发者的处理成本会小很多。

具体的参数格式为:users[0][user_key]=1&users[0][name]=parry&....

这个具体的正确格式尝试了很多种方式后,在看到原始的ASP处理方式时才知道,谢谢多说技术人员小武的耐心解答(QQ:1175762238)。

他给的asp源码在这里

两个辅助函数

顺手整理出了两个方法:POST数据到多说的API接口和设置多说本地身份说明(JWT)。

注意:在POST数据到多说的API接口方法中只处理了一个arrayPostData的情况,多个数组的形式请自行修改。

项目名称就叫DuoShuo.SDK.Partial了,希望更多的人来完善SDK。

有可以优化的地方请多指教。

  1 using System;
  2 using System.Collections.Generic;
  3 using System.IO;
  4 using System.Linq;
  5 using System.Net;
  6 using System.Web;
  7 
  8 namespace DuoShuo.SDK.Partial
  9 {
 10     /// <summary>
 11     /// 多说POST请求的帮助类,主要解释了array参数的拼接格式和JWT的设置
 12     /// </summary>
 13     /// <author>
 14     /// Parry
 15     /// Mail: qiupengyuan@gmail.com
 16     /// Blog: http://www.cnblogs.com/parry
 17     /// </author>
 18     public class DuoShuoHelper
 19     {
 20         #region POST数据
 21 
 22         /// <summary>
 23         /// POST数据到多说的API接口
 24         /// </summary>
 25         /// <summary>http://dev.duoshuo.com/docs/51435552047fe92f490225de</summary>
 26         /// <param name="apiUrl">接口的URL,如http://api.duoshuo.com/users/import.json</param>
 27         /// <param name="prePostData">不包含array参数的前置数据,类似:short_name=当前站点注册的多说二级域名&secret=站点多说密钥</param>
 28         /// <param name="arrayName">array形式的参数的名称,如users</param>
 29         /// <param name="arrayPostData">array形式的参数数据</param>
 30         /// <returns>接口返回的字符串</returns>
 31         /// <example>
 32         /// 注意array参数,在.NET下可以使用HashTable或者Dictionary实现
 33         /// 如:
 34         /// Dictionary<string, object> arrayPostData = new Dictionary<string, object>();
 35         /// arrayPostData.Add("user_key", 1);
 36         /// arrayPostData.Add("name", "Parry");
 37         /// arrayPostData.Add("role", "user");
 38         /// arrayPostData.Add("avatar_url", "");
 39         /// arrayPostData.Add("url", "");
 40         /// arrayPostData.Add("email", "");
 41         /// arrayPostData.Add("created_at", DateTime.Now.ToString("yyyy-mm-dd hh:MM:ss"));
 42         /// </example>
 43         /// <remarks>注意:此方法只处理了一个arrayPostData的情况,多个数组的形式请自行修改</remarks>
 44         public string HttpPostData(string apiUrl, string prePostData, string arrayName, Dictionary<string, object> arrayPostData)
 45         {
 46             var webRequest = WebRequest.Create(apiUrl) as HttpWebRequest;
 47             if (webRequest != null)
 48             {
 49                 webRequest.Method = "post";
 50                 webRequest.ContentType = "application/x-www-form-urlencoded";
 51 
 52                 //postData赋值
 53                 var postData = prePostData + "&" + string.Join("&", arrayPostData.Select(keyValuePair => string.Format("{0}[0][{1}]={2}", arrayName, keyValuePair.Key, keyValuePair.Value)).ToArray());
 54 
 55                 ////使用非LINQ实现postData赋值
 56                 //var listJoinArrayParamemter = new List<string>();
 57                 //foreach (KeyValuePair<string, object> keyValuePair in arrayPostData)
 58                 //{
 59                 //    listJoinArrayParamemter.Add(string.Format("users[0][{0}]={1}", keyValuePair.Key, keyValuePair.Value));
 60                 //}
 61                 //var postData = prePostData + "&" + string.Join("&", listJoinArrayParamemter.ToArray());
 62 
 63                 using (var sw = new StreamWriter(webRequest.GetRequestStream()))
 64                 {
 65                     sw.Write(postData);
 66                 }
 67 
 68                 using (var response = webRequest.GetResponse())
 69                 {
 70                     var stream = response.GetResponseStream();
 71                     if (stream == null) return string.Empty;
 72                     using (var sr = new StreamReader(stream))
 73                     {
 74                         return sr.ReadToEnd();
 75                     }
 76                 }
 77             }
 78             return string.Empty;
 79         }
 80 
 81         #endregion
 82 
 83         #region 多说本地身份说明(JWT)
 84 
 85         /// <summary>
 86         /// 设置多说本地身份说明(JWT)
 87         /// </summary>
 88         /// <summary>http://dev.duoshuo.com/docs/501e6ce1cff715f71800000d</summary>
 89         /// <param name="secretKey">站点多说密钥</param>
 90         /// <param name="shortName">当前站点注册的多说二级域名</param>
 91         /// <param name="userKey">用户在当前站点中对应的唯一标示,通常是用户ID</param>
 92         /// <param name="name">用户在当前网站的用户名</param>
 93         public void SetLocalJwt(string secretKey, string shortName, string userKey, string name)
 94         {
 95             var array = new Dictionary<string, object>
 96             {
 97                 {"short_name", shortName},
 98                 {"user_key", userKey},
 99                 {"name", name}
100             };
101             string token = JsonWebToken.Encode(array, secretKey, JwtHashAlgorithm.HS256);
102             //cookie设置了一年过期
103             var cookie = new HttpCookie("duoshuo_token") { Value = token, Expires = DateTime.Now.AddDays(365) };
104             HttpContext.Current.Response.Cookies.Add(cookie);
105         }
106 
107         #endregion
108 
109     }
110 }

完整源码下载,包含JWT公共类。


作者:Parry
出处:http://www.cnblogs.com/parry/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

相关文章
|
5天前
|
API PHP
2025宝塔API一键建站系统PHP源码
2025宝塔API一键建站系统PHP源码
113 88
|
3天前
|
存储 数据挖掘 BI
API数据源:轻松接入各类业务系统数据
在数字化转型中,企业面临多样化的数据需求。Quick BI推出API数据源功能,支持广泛的数据接入,包括实时天气、电商交易及内部业务数据,极大丰富了可分析数据范围。该功能提供灵活的连接方式(抽取和直连模式)、多元授权机制(基础认证、前置请求)和自动化数据解析,降低了操作门槛,提升了配置效率。通过动态Token获取等最佳实践,确保数据安全与实时性,满足企业具体业务需求。了解更多,请访问Quick BI官方文档或瓴羊官网。
112 77
|
16天前
|
API 数据安全/隐私保护 开发者
京东商品评论数据接口(JD.item_review)丨京东API接口指南
京东商品评论数据接口(JD.item_review)让开发者获取京东商品的评论列表、内容、时间、买家昵称等详细信息,助力产品优化和市场研究。使用步骤包括注册京东开发者账号、创建应用并申请API权限、获取API密钥、阅读API文档,最后通过HTTP请求调用接口获取数据。示例代码展示了如何使用Python进行请求。
|
22天前
|
安全 API 数据安全/隐私保护
自学记录HarmonyOS Next DRM API 13:构建安全的数字内容保护系统
在完成HarmonyOS Camera API开发后,我深入研究了数字版权管理(DRM)技术。最新DRM API 13提供了强大的工具,用于保护数字内容的安全传输和使用。通过学习该API的核心功能,如获取许可证、解密内容和管理权限,我实现了一个简单的数字视频保护系统。该系统包括初始化DRM模块、获取许可证、解密视频并播放。此外,我还配置了开发环境并实现了界面布局。未来,随着数字版权保护需求的增加,DRM技术将更加重要。如果你对这一领域感兴趣,欢迎一起探索和进步。
83 18
|
18天前
|
安全 测试技术 API
探秘驱动软件系统高效协同的高效协同之API接口
在数字化时代,API(应用程序编程接口)作为现代软件开发的核心组件,犹如无形的桥梁,连接不同应用、平台和服务,促进数据和功能自由流动。本文深入探讨API的基本概念、工作原理、核心组成部分及其在现代软件开发中的应用与最佳实践。通过统一数据格式、确保安全性和实施版本控制,API助力高效协同,并在社交媒体、物联网及企业系统中展现出巨大价值。未来,API将朝着智能化方向发展,同时面临并解决安全挑战,推动各行业的数字化转型。
51 6
|
19天前
|
JSON API 开发者
Lazada 商品评论列表 API 接口:开发、应用与收益
Lazada作为东南亚领先的电商平台,其商品评论数据蕴含丰富信息。通过开发和利用Lazada商品评论列表API接口,企业可深入挖掘这些数据,优化产品、营销和服务,提升客户体验和市场竞争力。该API基于HTTP协议,支持GET、POST等方法,开发者需注册获取API密钥,并选择合适的编程语言(如Python)进行开发。应用场景包括竞品分析、客户反馈处理及精准营销,帮助企业提升销售业绩、降低运营成本并增强品牌声誉。
34 2
|
1月前
|
JSON API 数据安全/隐私保护
淘宝评论API接口操作步骤详解,代码示例参考
淘宝评论API接口是淘宝开放平台提供的一项服务,通过该接口,开发者可以访问商品的用户评价和评论。这些评论通常包括评分、文字描述、图片或视频等内容。商家可以利用这些信息更好地了解消费者的需求和偏好,优化产品和服务。同时,消费者也可以从这些评论中获得准确的购买参考,做出更明智的购买决策。
|
30天前
|
JSON API 数据格式
淘系等商品评论Json数据格式参考,API接口测试
通过以上示例和说明,你可以了解淘系商品评论的JSON数据结构和如何使用相关API接口获取评论数据。在实际操作中,你需要参考具体的API接口文档和开放平台的相关说明进行配置和调用。
|
1月前
|
搜索推荐 数据挖掘 API
淘宝天猫商品评论数据接口丨淘宝 API 实时接口指南
淘宝天猫商品评论数据接口(Taobao.item_review)提供全面的评论信息,包括文字、图片、视频评论、评分、追评等,支持实时更新和高效筛选。用户可基于此接口进行数据分析,支持情感分析、用户画像构建等,同时确保数据使用的合规性和安全性。使用步骤包括注册开发者账号、创建应用获取 API 密钥、发送 API 请求并解析返回数据。适用于电商商家、市场分析人员和消费者。
|
1月前
|
供应链 监控 搜索推荐
获得1688商品评论API接口的开发应用与收益
1688商品评论API接口提供丰富的商品评论数据,涵盖评论内容、用户信息、商品评分等,助力电商平台优化运营、市场分析和供应链管理,提升客户满意度与忠诚度,促进商业价值增长。
61 3

热门文章

最新文章