using Newtonsoft.Json.Linq;
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Net;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
using System.Web;
using TelegramService.Bl;
using TelegramService.Entity;
using TelegramService.Help;
namespace TelegramServiceV6.Bl
{
public class TieBaBl
{
///
/// 发送 消息
///
private void SendTextMessage(string title, string sType, string stime, string surl)
{
try
{
string sHtml = "\r\n标 题:" + title + "\n";
sHtml += "类 型:" + sType + "\n";
sHtml += "入库时间:" + stime + "\n";
sHtml += "链 接:" + surl + "\n";
JObject oObj = new JObject();
oObj.Add("chat_id", "-1001523898048");
oObj.Add("text", sHtml);
oObj.Add("parse_mode", "HTML");
//是否显示url 预览
oObj.Add("disable_web_page_preview", "TRUE");
SendMessageBl.SendTg("https://api.telegram.org/bot1918024418:AAHj_RNtA-XkWbodtzkzaTIxc0XYxBVoQKY/sendMessage", oObj.ToString());
}
catch (Exception ex)
{
EntrustHelper.STCB("show", "[TieBaBl.SendTextMessage] " + ex.Message);
}
}
///
/// 获取贴吧
///
public async void GetTieBaHtml()
{
try
{
EntrustHelper.STCB("show", "[TieBaBl.GetTieBaHtml1] 开始执行!");
HttpResult httpResult = null;
foreach (var tk in Appsettings.Conf.TieBa)
{
string key = tk.ToString();
string encodedUrl = HttpUtility.UrlEncode(key);
string shtml = null;
string tiebaUrl = "https://tieba.baidu.com/mo/m?kw=" + encodedUrl.ToUpper() + "&lm=&pn=0";
for (int i = 0; i < 3; i++)
{
httpResult =await HttpHelper.GetAsync(tiebaUrl);
if (httpResult.StatusCode == 200)
{
shtml = httpResult.Html;
break;
}
}
if (shtml.IsNullOrWhiteSpace())
{
EntrustHelper.STCB("show", "[TieBaBl.GetTieBaHtml2] 获取不到数据!");
return;
}
List listHtmlTag = HtmlTag.FindTagByAttr(shtml, "ul", "id", "frslistcontent");
List lista = null;
if (listHtmlTag.Count == 0)
{
EntrustHelper.STCB("show", "[TieBaBl.GetTieBaHtml3] 贴吧html匹配不到div!");
return;
}
listHtmlTag = listHtmlTag[0].FindTagByAttr("li", "class", "tl_shadow tl_shadow_new ");
for (int i = 0; i < listHtmlTag.Count; i++)
{
try
{
lista = listHtmlTag[i].FindTag("a");
if (lista.Count == 0)
{
continue;
}
string url = lista[0].GetAttribute("href");
string id = Regex.Match(url, @"(?is)/p/(?.*?)s*\?").Groups["value"].Value;
if (id.IsNull())
{
continue;
}
lista = lista[0].FindTagByAttr("div", "class", "ti_title");
if (lista.Count <= 0)
{
continue;
}
string title = lista[0].InnerText;
if (title.Contains(" "))
{
string[] arr = title.SplitRemoveEmptyEntries(" ");
if (arr.Length > 1)
{
title = arr[1];
}
}
tieba tb = new tieba();
tb.id = id;
tb.title = title;
if (tb.title.Length > 149)
{
tb.title = tb.title.Substring(0, 149);
}
tb.key = key;
tb.url = "tieba.baidu.com/p/" + tb.id;
tb.sysaddtime = DateTime.Now;
if (SetTieBaDB(tb) > 0)
{
SendTextMessage(tb.title, tb.key, tb.sysaddtime.ToDateStr(), "https://" + tb.url);
}
}
catch (Exception ex)
{
EntrustHelper.STCB("show", "[TieBaBl.GetTieBaHtml4] " + ex.Message);
}
}
listHtmlTag.Clear();
lista.Clear();
Thread.Sleep(5000);
}
EntrustHelper.STCB("show", "[TieBaBl.GetTieBaHtml5] 执行结束!");
}
catch (Exception)
{
}
finally
{
EntrustHelper.STCB("InitTimerTieBa", Appsettings.Conf.IntervalTieBa);
}
}
///
/// 写入 数据库
///
///
private int SetTieBaDB(tieba tb)
{
try
{
var x = Db.dbConnection.Storageable(tb).ToStorage();
x.AsInsertable.ExecuteCommand();//不存在插入
return x.InsertList.Count;
}
catch (Exception ex)
{
EntrustHelper.STCB("show", "[TieBaBl.SetTieBaDB] " + ex.Message);
}
return 0;
}
}
}