java怎么实现同步到微博功能_新浪微博信息站外同步的完整实现

最近遇到一个项目,其中需要将用户的微博信息与自己的网站项目上同步,好在新浪微博是提供了API的,大概查阅了一下,信息同步需要调用的是

在关于授权机制说明中,新浪微博的API一共有两种验证机制,分别是:OAuth和Basic Auth,OAuth没有细看,不去管他,在Basic Auth授权介绍部分提到了cnblogs上的一篇文章, http://www.cnblogs.com/QLeelulu/archive/2009/11/22/1607898.html,这篇文章给出了在asp.net中如何去以GET方式提交一个http请求,并给出返回内容的代码,顺着这篇文章又找到了另一篇博客园团队的文章:http://www.cnblogs.com/cmt/archive/2010/05/13/1733904.html,这篇文章实现了站外发送微博的功能。结合这两篇文章,实现了新浪微博同步的功能。

下面介绍实现微博同步的步骤:

1.首先为了实现http请求,需要引入using System.Net;命名空间,同时后面在转换字符集部分及取得返回内容部分,需要另外两个命名空间:using System.Text;和using System.IO;

接下来就可以开始编写代码实现取得json数据了。

(1)准备用户验证数据

string usernamePassword = username + ":" + password;

username是你的微博登录用户名,password是你的博客密码。

(2)准备API的URL,URL中的参数直接以GET方式附在URL中,刚开始博客园的文章没有细看,直接贴过来代码,把参数附加在data中,总是返回400错误,后来查了一下msdn,发现HttpWebRequest的默认请求方式就是GET,再者既然是GET方式,应该就是以URL来传递参数的。

string url = "https://api.weibo.com/2/statuses/user_timeline.json?source="+apikey+"&count="+count+"";

上面的apikey是做为新浪微博用户的开发者申请的,应该是唯一的,博客园的文章中说需要发一封邮件审核,我没有发邮件,直接申请,也得到了一个APIKEY,信息也可以同步,只不过当在站外发送微博信息时,在来源部分会是:未审核应用。后面还有uid和screen_name 等参数,具体的参数API文档都有说明。

(3)组织代码实现HttpWebRequest请求

WebRequest webRequest = System.Net.WebRequest.Create(url);

HttpWebRequest myReq = webRequest as System.Net.HttpWebRequest;

CredentialCache mycache = new CredentialCache();

mycache.Add(new Uri(url), "Basic", new NetworkCredential(username, password));

myReq.Credentials = mycache;

//验证用户授权机制

myReq.Headers.Add("Authorization", "Basic" + Convert.ToBase64String(new ASCIIEncoding().GetBytes(usernamePassword)));

(4)取得返回内容,其中用到了Stream类。

WebResponse wr = myReq.GetResponse();

Stream receiveStream = wr.GetResponseStream();

StreamReader reader = new StreamReader(receiveStream, Encoding.UTF8);

string content = reader.ReadToEnd();

上面的content即为取得的微博信息的json格式的内容,到此为止,已经实现了如何获得微博内容的功能。接下来的部分就是如何格式化json内容,以相应的形式显示在网页中。

2.在asp.net中格式化json数据。

取得json数据后,到网上搜了一下,大多都是介绍如何在javascript中去以键值形式读取的,本人对javascript比较畏惧。其中有两篇文章是以类的形式实现了如何在asp.net中读取json数据,没有去实践。后来在一篇文章中发现Jayrock.Json,使用起来比较简单,同时有一篇word的使用说明文档。下面的代码实现是基于Jayrock.Json实现的。Jayrock.Json中基本是以JsonArray和JsonObject的转换来实现以键值方式读取json数据,我是将取得的数据放入DataTable中,后来想想这样也有好处,前台的UI可以随意设计,最终绑定到DataTabel即可。

下面是格式化Json数据并实现DataTable的代码。

JsonReader jsonRead = new JsonTextReader(new StringReader(content));

JsonObject jsonobj = new JsonObject();

jsonobj.Import(jsonRead);

JsonArray wiboArr = jsonobj["statuses"] as JsonArray;

DataTable wibo = new DataTable();

wibo.Columns.Add("id", typeof(Int64));

wibo.Columns.Add("screen_name", typeof(string));

wibo.Columns.Add("profile_image_url", typeof(string));

wibo.Columns.Add("text", typeof(string));

wibo.Columns.Add("source", typeof(string));

wibo.Columns.Add("created_at", typeof(DateTime));

foreach (JsonObject wibolist in wiboArr)

{

DataRow dr = wibo.NewRow();

dr["id"] = Convert.ToInt64(wibolist["id"]);

JsonObject user = wibolist["user"] as JsonObject;

dr["screen_name"] = user["screen_name"].ToString();

dr["profile_image_url"] = user["profile_image_url"].ToString();

dr["text"] = wibolist["text"].ToString();

dr["source"] = wibolist["source"].ToString();

dr["created_at"] = DateTime.ParseExact(wibolist["created_at"].ToString(), "ddd MMM dd HH:mm:ss K yyyy", new System.Globalization.CultureInfo("en-GB"));

wibo.Rows.Add(dr);

}

通过上面的两大步骤,实现了取得微博信息,并将其放入DataTable中的功能。

后记:新浪微博的创建时间格式是:Tue May 31 17:46:55 +0800 2011,网上也没找到相关资料,开始的时候是自己专门编写了两个函数用来解析这个时间字符串,后来csdn上的一个朋友dalmeeme以一行代码的形式(DateTime自带的一个方法)就实现了,在此一并感谢!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/291333.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

33:计算分数加减表达式的值

33:计算分数加减表达式的值 查看提交统计提问总时间限制: 1000ms内存限制: 65536kB描述编写程序&#xff0c;输入n的值&#xff0c;求 1/1 - 1/2 1/3 - 1/4 1/5 - 1/6 1/7 - 1/8 ... (-1)n-11/n 的值。 输入输入一个正整数n。1 < n < 1000。输出输出一个实数&#x…

如何打卡后缀为3ds的文件

打开.3DS文件 3DS文件怎么打开&#xff1f; 用它吧&#xff1a;a3dsviewer&#xff0c;顾名思义&#xff0c;一个3D文件浏览工具&#xff0c;为用户提供一个快速和简单的3DS文件浏览器很容易。 这里是一些主要特点的“a3dsviewer”&#xff1a; 将3DS文件的POVRay格式。 输出的…

C/C++基本数据类型所占字节数

关于这个主要的问题&#xff0c;非常早曾经就非常清楚了&#xff0c;C标准中并没有详细给出规定那个基本类型应该是多少字节数&#xff0c;并且这个也与机器、OS、编译器有关&#xff0c;比方相同是在32bits的操作系统系&#xff0c;VC的编译器下int类型为占4个字节&#xff1b…

LeetCode之Find the Difference

1、题目 Given two strings s and t which consist of only lowercase letters. String t is generated by random shuffling string s and then add one more letter at a random position. Find the letter that was added in t. Example: Input: s "abcd" t &qu…

ASP.NET Core使用功能开关控制路由访问(续)

前言在前面的文章&#xff0c;我们介绍了使用功能开关控制路由访问。但其实我们使用了2个条件做的判断&#xff1a;var isDebugEndpoint context.Request.Path.Value.Contains("/test"); var debugEndpoint await _featureManager.IsEnabledAsync("ForbiddenD…

如何使用CDR智能填充工具

使用智能填充工具可以为任意的闭合区域填充颜色并设置轮廓。与其他填充工具不同&#xff0c;智能填充工具仅填充对象&#xff0c;它检测到区域的边缘并创建一个闭合路径&#xff0c;因此可以填充区域。例如&#xff0c;智能填充工具可以检测多个对象相交产生的闭合区域&#xf…

java对象引用出错_“Java有值传递和引用传递”为什么错了?

前言初学Java的时候&#xff0c;老师在课堂上说“Java有值传递和引用传递”&#xff0c;但网上“Java只有值传递”的呼声很高。本人在查找资料的过程中&#xff0c;在这两个说法之间反复横跳。经过本人的整理后&#xff0c;其实还真的是Java只有值传递。什么是值传递&#xff1…

试图加载格式不正确的程序

部署IIS的时候&#xff0c;会出现 System.BadImageFormatException: Could not load file or assembly xxx or one of its dependencies. 试图加载格式不正确的程序。 问题分析&#xff1a; 由于编译中有的是32位有的是64位 不一致 解决办法&#xff1a; 1.找到IIS该站点对应的…

LeetCode之Missing Number

1、题目 Given an array containing n distinct numbers taken from 0, 1, 2, ..., n, find the one that is missing from the array. For example, Given nums [0, 1, 3] return 2. Given nums [0]return 12、代码实现 public class Solution {public int missingNumber(in…

Windows下卸载软件时提示 等待先前的卸载完成? 终止 dllhost.exe 进程

只要结束进程中的 “dllhost" 进程就好了。 估计原因是&#xff0c; 当卸载某些 "所谓的"较大型的软件的时候&#xff0c; 要去更新&#xff0c; 更改系统对dll链接库的注册&#xff0c; 更新。 通常这个过程等待的时间较长&#xff0c; 或者需要重新启动电脑才…

程序员生存之道-教你如何在丛林中捕获食物

文章目录 &#x1f4a5; 序言&#x1f423; 躺&#x1f95d; 从零到一还是从零到100&#xff1f;&#x1f344; 螺丝钉文化&#x1f354; 价值分析&#x1f353; 长期主义者&#xff1f;&#x1f96c; 何为顺其自然&#xff1f;&#x1f308; 总结 &#x1f4a5; 序言 嗨&#…

微软发文庆祝 .NET 诞生 20 周年纪念日!

技术编辑&#xff1a;MissD丨发自 思否编辑部公众号&#xff1a;SegmentFault刚刚过去的“情人节”里&#xff0c;.NET 团队为庆祝 .NET 社区诞生 20 周年而举办了一场盛大的活动。没错&#xff01;.NET 于 2002 年 2 月 13 日与 Visual-Studio 一起推出&#xff0c;本月终于迎…

java代码实现四舍五入_Java中四舍五入实现方法

Java中四舍五入实现方法Java有四舍五入函数–Math.round&#xff0c;通过一个例子看看他的用法&#xff1a;[java] view plaincopypackage math;public class MathRoundTest {/*** Math类中提供了三个与取整有关的方法&#xff1a;ceil,floor,round,* 这些方法的作用于它们的英…

【动态规划】[Uva11270]Tiling Dominoes

这道题就是连通性状态压缩DP&#xff0c;复习了一下。 #include <cstdio> #include <iostream> #include <cstring> #include <map> using namespace std; long long dp[11][11][(1<<11)1][2], n, m; long long dfs(int x, int y, int md, int r…

LeetCode之Find All Numbers Disappeared in an Array

1、题目 Given an array of integers where 1 ≤ a[i] ≤ n (n size of array), some elements appear twice and others appear once. Find all the elements of [1, n] inclusive that do not appear in this array. Could you do it without extra space and in O(n) runti…

根据文件扩展名得到文件对应该类型Icon方法

2019独角兽企业重金招聘Python工程师标准>>> 根据文件扩展名得到文件对应该类型Icon方法 package com.fleety.util; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.GraphicsConfiguration; import java.awt.GraphicsDevice; import java.…

Asp-Net-Core开发笔记:在docker部署时遇到一个小坑

哦吼之前刚说了尝试了使用docker来部署AspNetCore应用&#xff08;Asp.Net Core部署&#xff1a;早知道&#xff0c;还是docker!以及一点碎碎念&#xff09;&#xff0c;结果这才刚上班就遇到问题了 …我这项目用的数据库是Oracle&#xff0c;之前直接运行没啥问题&#xff0c;…

lasso特征选择python_转:结合Scikit-learn介绍几种常用的特征选择方法-2

4.2 平均精确率减少 Mean decrease accuracy另一种常用的特征选择方法就是直接度量每个特征对模型精确率的影响。主要思路是打乱每个特征的特征值顺序&#xff0c;并且度量顺序变动对模型的精确率的影响。很明显&#xff0c;对于不重要的变量来说&#xff0c;打乱顺序对模型的精…

shell中条件判断if中的-z到-d的意思

shell中条件判断if中的-z到-d的意思 [ -a FILE ] 如果 FILE 存在则为真。 [ -b FILE ] 如果 FILE 存在且是一个块特殊文件则为真。 [ -c FILE ] 如果 FILE 存在且是一个字特殊文件则为真。 [ -d FILE ] 如果 FILE 存在且是一个目录则为真。 [ -e FILE ] 如果 FILE 存在则为真。…

Mac Generating Pods project Abort trap: 6

为什么80%的码农都做不了架构师&#xff1f;>>> 为项目添加cocoapods如果产生此种错误时,主要有以下几点原因: 1,cocoapods版本过低: 打开终端在终端输入:pod --version,目前最新版本是1.2.0(2017年3月),如果发现版本过低,则可以在终端输入以下命令:gem install co…