【开源】开发者新闻APP+新闻Restful服务+博客园新闻采集程序+infoq新闻采集程序+36kr新闻采集程序+oschina新闻采集程序+51cto新闻采集程序+csdn新闻采集程序
这几天车子跟别人撞了,水箱撞稀烂了,要坐一个星期的公车
实在太无聊,就抽时间搞了这么个APP出来,打发公车上的时光
(开发者头条里的新闻专业性太强,公车上实在无法静心研读)
我经常看的也就博客园、infoq、36kr、开源中国的新闻
现在只做了博客园和infoq,接下来打算做36kr和开源中国的新闻(这个工作今天早上已经完成了),如果大家有什么好建议也可以在评论里提
数据都是准实时的取来的,以后争取做到你去刷就有新闻给你看
todo:新闻的分享、收藏、标签、分类等功能,当然这要看大家的热情程度啦!
ps:你如果看了我写的采集代码,就不会问为什么不用rss这种东西了
更新:又增加了51cto的采集程序
废话少说,先来上图
接着上APK的下载连接(大家热情的话,苹果版也会有的)
https://github.com/xland/DeveloperNews/blob/master/DeveloperNews.apk?raw=true
接着公布源码
https://github.com/xland/DeveloperNews
关键源码讲解:
采集程序的源码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 | static void cnblogs() { CQ doc; try { var client = new RestClient( "http://www.cnblogs.com/news/" ); var resq = new RestRequest(Method.GET); var resp = client.Execute(resq); doc = resp.Content; } catch (Exception ex) { Thread.Sleep(GetWaitTime()); cnblogs(); return ; } var arr = doc[ ".post_item_body" ].ToList(); var dataList = new List<allen_news>(); var db = dbFactory.Open(); foreach ( var item in arr) { var str = item.InnerText; var strArr = str.Split(Environment.NewLine.ToCharArray(),StringSplitOptions.RemoveEmptyEntries); var data = new allen_news(); data.news_title = strArr[0]; if (checkTitle(data.news_title)) { break ; } data.news_summary = strArr[1].Trim(); data.author = strArr[2].Split( "发布于" .ToCharArray(),StringSplitOptions.RemoveEmptyEntries)[0]; data.add_time = DateTime.Now; data.from_site_flag = 0; data.news_url = ((CQ)item.InnerHTML)[ "h3 a" ].Attr( "href" ); dataList.Insert(0, data); } if (dataList.Count >0) { db.InsertAll<allen_news>(dataList); } db.Dispose(); Console.WriteLine( "增加了{0}条文章0" , dataList.Count); Thread.Sleep(GetWaitTime()); cnblogs(); } |
采集程序用到了CsQuery和RestSharp和ServiceStack.OrmLite三个开源程序
GetWaitTime()随机等1分钟到10分钟之间的一个时间长度,不要频繁的采,不要有规律的采,避免目标主机封锁采集程序所在的IP
再来看WEB服务的关键代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | protected void Page_Load( object sender, EventArgs e) { dbFactory = new OrmLiteConnectionFactory(ConfigurationManager.AppSettings[ "dbConnStr" ], MySqlDialect.Provider); var action = Request[ "Action" ]; var id = Request[ "Id" ]; List <allen_news> result = null; if (action = = "PullDown" ) { var db = dbFactory. Open (); result = db.SelectFmt<allen_news>( "select * from allen_news where news_id > {0} order by news_id desc limit 0,30" , id ); db.Dispose(); } else if (action = = "PullUp" ) { var db = dbFactory. Open (); result = db.SelectFmt<allen_news>( "select * from allen_news where news_id < {0} order by news_id desc limit 0,30" , id ); db.Dispose(); } else if (action = = "CheckVersion" ) { Response.Write( "1.0.0" ); Response.End(); return ; } else { var db = dbFactory. Open (); result = db.Select<allen_news>( "select * from allen_news order by news_id desc limit 0,30" ); db.Dispose(); } Response.Write(JsonConvert.SerializeObject(result)); Response.End(); } |
APK客户端的代码,没有什么特殊的,大家可以自己去看吧
OK,就这些啦,喜欢的请给我点个赞,或者到github上给我颗星
多谢各位啦
分类:
C#
, ASP.NET/MVC/Web API
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统