From 0b91f30cd2e7ac2c4f28c062967e8398d5485e3e Mon Sep 17 00:00:00 2001 From: luchenqun Date: Thu, 16 Mar 2017 23:07:37 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E6=88=90=E9=83=A8=E5=88=86=E6=8A=93?= =?UTF-8?q?=E5=8F=96=E7=83=AD=E9=97=A8=E6=96=87=E7=AB=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app.js | 1 + database/db.js | 26 ++++++++++++++++ package.json | 1 + routes/api.js | 81 ++++++++++++++++++++++++++++++++++++++++++++++++++ schema.sql | 3 +- 5 files changed, 111 insertions(+), 1 deletion(-) diff --git a/app.js b/app.js index 75ee8c6..f25b6ab 100644 --- a/app.js +++ b/app.js @@ -78,5 +78,6 @@ app.use(function(err, req, res, next) { api.checkSnapFaviconState(); api.getSnapByTimer(); api.getFaviconByTimer(); +api.getHotBookmarks(); module.exports = app; diff --git a/database/db.js b/database/db.js index 27a359c..54ae4af 100644 --- a/database/db.js +++ b/database/db.js @@ -775,4 +775,30 @@ db.updateBookmarkFaviconState = function(id, faviconState) { }); } +db.addHotBookmark = function(bookmark) { + var insertSql = "INSERT INTO `hot_bookmarks` (`id`, `date`, `title`, `url`, `fav_count`, `created_by`, `created_at`, `last_click`, `snap_url`, `favicon_url`) VALUES ('" + client.escape(bookmark.id) + "', '" + client.escape(bookmark.date) + "', '" + client.escape(bookmark.title) + "', '" + client.escape(bookmark.url) + "', '" + client.escape(bookmark.fav_count) + "', '" + client.escape(bookmark.created_by) + "', '" + client.escape(bookmark.created_at) + "', '" + client.escape(bookmark.last_click) + "', '" + client.escape(bookmark.snap_url) + "', '" + client.escape(bookmark.favicon_url) + "')"; + + var selectSql = "SELECT * FROM `bookmarks` WHERE `id` = '" + bookmark.id + "' OR `url` = '" + bookmark.url + "'"; + console.log(insertSql, selectSql); + return new Promise(function(resolve, reject) { + client.query(selectSql, (err, result) => { + if (err) { + reject(err); + } else { + if (result.length >= 1) { + resolve(result[0].id); + } else { + client.query(insertSql, (err, result) => { + if (err) { + reject(err); + } else { + resolve(result.insertId); + } + }); + } + } + }); + }); +}; + module.exports = db; diff --git a/package.json b/package.json index d4392f6..8dd1913 100644 --- a/package.json +++ b/package.json @@ -21,6 +21,7 @@ "multer": "^1.3.0", "mysql": "^2.11.1", "node-readability": "^2.2.0", + "request": "^2.81.0", "serve-favicon": "~2.3.0", "supervisor": "^0.11.0", "webshot": "^0.18.0" diff --git a/routes/api.js b/routes/api.js index fca7c2f..2529536 100644 --- a/routes/api.js +++ b/routes/api.js @@ -9,6 +9,7 @@ var multer = require('multer'); var webshot = require('webshot'); var fs = require('fs'); var favicon = require('favicon'); +var request = require('request'); var storage = multer.diskStorage({ destination: function(req, file, cb) { @@ -1006,6 +1007,73 @@ api.getFaviconByTimer = function() { }, timeout); } +api.getHotBookmarks = function() { + console.log('getHotBookmarks...........'); + var timeout = 1000 * 20; + var busy = false; + setInterval(function() { + if (busy) { + console.log('getHotBookmarks is busy') + return; + } + busy = true; + var today = new Date(); + var requireData = { + idfa: "d4995f8a0c9b2ad9182369016e376278", + os: "ios", + osv: "9.3.5", + userId: null, + lastupdataTime: new Date().getTime(), + pageNo: 1, + pageSize: 1000, + sort: 'desc', + renderType: 0, + date: CurentDate(0), + } + var url = "https://api.shouqu.me/api_service/api/v1/daily/dailyMark"; + var alterRex = "/mmbiz.qpic.cn|images.jianshu.io|zhimg.com/g"; + var defaultSnap = "./images/snap/default.png"; + var defaultFavicon = "./images/favicon/default.ico"; + request.post({ + url: url, + form: requireData + }, function(error, response, body) { + if (response && response.statusCode == 200) { + var data = JSON.parse(body).data; + var bookmarks = []; + data.list.forEach((b) => { + var bookmark = {}; + bookmark.id = b.articleId; + bookmark.date = parseInt(today.format('yyyyMMdd')); + bookmark.title = b.title; + bookmark.url = b.url; + bookmark.fav_count = b.favCount; + bookmark.created_by = b.sourceName; + bookmark.created_at = b.updatetime > b.createtime ? b.createtime : b.updatetime; + bookmark.last_click = b.updatetime < b.createtime ? b.createtime : b.updatetime; + if (b.imageList.length >= 1) { + bookmark.snap_url = (data.pageNo == 1 ? (b.imageList[0].url.match(alterRex) != null ? defaultSnap : b.imageList[0].url) : defaultSnap); + } else { + bookmark.snap_url = defaultSnap; + } + bookmark.favicon_url = b.sourceLogo || defaultFavicon; + bookmarks.push(bookmark); + if (bookmarks.length == 1) { + db.addHotBookmark(bookmark) + .then((id) => { + console.log(id); + }) + .catch((err) => { + console.log('getHotBookmarks err', err); + }); + } + + }) + } + }); + }, timeout); +} + function md5(str) { return crypto.createHash('md5').update(str).digest('hex'); }; @@ -1020,4 +1088,17 @@ function copyFile(sourceFile, destFile) { }); } +function CurentDate(i) { + if (i == undefined) { + i = 0; + } + var now = new Date(); + now.setTime(now.getTime() + i * 24 * 60 * 60 * 1000); + var year = now.getFullYear(); //年 + var month = now.getMonth() + 1; //月 + var day = now.getDate(); //日 + var clock = year + "年" + month + "月" + day + "日"; + return (clock); +} + module.exports = api; diff --git a/schema.sql b/schema.sql index b6db2c3..a5d7d2e 100644 --- a/schema.sql +++ b/schema.sql @@ -67,10 +67,11 @@ CREATE TABLE `advices` ( drop table if exists hot_bookmarks; CREATE TABLE `hot_bookmarks` ( `id` int(11) NOT NULL AUTO_INCREMENT, -- id(articleId) + `date` int(11) NOT NULL DEFAULT 0, -- 日期(自己添加) `title` varchar(255) DEFAULT NULL, -- 标题(title) `description` varchar(4096) DEFAULT NULL, -- 描述(自己添加) `url` varchar(1024) DEFAULT NULL, -- 链接(url) - `click_count` smallint DEFAULT 1, -- 总共点击次数(favCount) + `fav_count` smallint DEFAULT 1, -- 总共收藏人数(favCount) `created_by` varchar(64) DEFAULT NULL, -- 创建者(sourceName) `created_at` bigint DEFAULT 0, -- 创建时间(updatetime) `last_click` bigint DEFAULT 0, -- 最后一次点击时间(createtime)