完成每个10分钟,自动获取热门标签
This commit is contained in:
parent
0b91f30cd2
commit
b44b841241
2
app.js
2
app.js
|
|
@ -78,6 +78,6 @@ app.use(function(err, req, res, next) {
|
|||
api.checkSnapFaviconState();
|
||||
api.getSnapByTimer();
|
||||
api.getFaviconByTimer();
|
||||
api.getHotBookmarks();
|
||||
api.getHotBookmarksByTimer();
|
||||
|
||||
module.exports = app;
|
||||
|
|
|
|||
|
|
@ -776,26 +776,27 @@ 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 sql = "REPLACE INTO `hot_bookmarks` (`id`, `date`, `title`, `url`, `fav_count`, `created_by`, `created_at`, `last_click`, `snap_url`, `favicon_url`) VALUES ('" + bookmark.id + "', '" + bookmark.date + "', " + client.escape(bookmark.title) + ", " + client.escape(bookmark.url) + ", '" + bookmark.fav_count + "', " + client.escape(bookmark.created_by) + ", '" + bookmark.created_at + "', '" + 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) => {
|
||||
client.query(sql, (err, result) => {
|
||||
if (err) {
|
||||
reject(err);
|
||||
} else {
|
||||
resolve(result.insertId);
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
db.hotBookmarks = function(date) {
|
||||
var sql = "SELECT * FROM `hot_bookmarks` WHERE `date` = "+ date +" AND `status` = 0"
|
||||
return new Promise(function(resolve, reject) {
|
||||
client.query(sql, (err, result) => {
|
||||
if (err) {
|
||||
reject(err);
|
||||
} else {
|
||||
resolve(result);
|
||||
}
|
||||
});
|
||||
});
|
||||
|
|
|
|||
|
|
@ -9,8 +9,8 @@ app.controller('bookmarkInfoCtr', ['$scope', '$state', '$timeout', '$sce', '$win
|
|||
$('.ui.modal.js-bookmark-info').modal({
|
||||
closable: false,
|
||||
}).modal('setting', 'transition', transition()).modal('show');
|
||||
bookmark.favicon = bookmark.favicon || ('http://g.soz.im/'+bookmark.url +'/cdn.ico');
|
||||
bookmark.image = bookmark.image || ('./images/snap/'+bookmark.id+'.png');
|
||||
bookmark.favicon_url = bookmark.favicon_url || ('http://g.soz.im/'+bookmark.url +'/cdn.ico');
|
||||
bookmark.snap_url = bookmark.snap_url || ('./images/snap/'+bookmark.id+'.png');
|
||||
$scope.bookmark = bookmark;
|
||||
$scope.bookmark.description = $sce.trustAsHtml(bookmark.description);
|
||||
$scope.content = '';
|
||||
|
|
|
|||
|
|
@ -198,7 +198,9 @@ app.controller('editCtr', ['$scope', '$state', '$timeout', '$document', 'bookmar
|
|||
$scope.autoGettitle = false;
|
||||
$scope.url = bookmark.url;
|
||||
$scope.title = bookmark.title;
|
||||
if(bookmark.tags && bookmark.tags.length >= 1){
|
||||
$scope.newTags = bookmark.tags.map((item) => item.name).toString();
|
||||
}
|
||||
});
|
||||
|
||||
// 在输入文字的时候也会触发,所以不要用Ctrl,Shift之类的按键
|
||||
|
|
|
|||
|
|
@ -24,7 +24,7 @@ app.controller('hotCtr', ['$scope', '$state', '$stateParams', '$filter', '$windo
|
|||
console.log('autoLogin err', err)
|
||||
});
|
||||
|
||||
getBookmarks();
|
||||
getHotBookmarks();
|
||||
|
||||
$scope.jumpToUrl = function(url) {
|
||||
$window.open(url, '_blank');
|
||||
|
|
@ -66,6 +66,9 @@ app.controller('hotCtr', ['$scope', '$state', '$stateParams', '$filter', '$windo
|
|||
$scope.toastrId = toastr.info('请先登录再转存书签!', "提示");
|
||||
} else {
|
||||
var b = $.extend(true, {}, bookmark); // 利用jQuery执行深度拷贝
|
||||
b.tags = [{
|
||||
name: b.created_by
|
||||
}]
|
||||
pubSubService.publish('TagCtr.storeBookmark', b);
|
||||
}
|
||||
}
|
||||
|
|
@ -91,6 +94,7 @@ app.controller('hotCtr', ['$scope', '$state', '$stateParams', '$filter', '$windo
|
|||
$scope.detailBookmark = function(b) {
|
||||
var bookmark = $.extend(true, {}, b); // 利用jQuery执行深度拷贝
|
||||
bookmark.own = false;
|
||||
bookmark.own = false;
|
||||
bookmark.tags = [{
|
||||
id: -1,
|
||||
name: '热门收藏'
|
||||
|
|
@ -100,12 +104,12 @@ app.controller('hotCtr', ['$scope', '$state', '$stateParams', '$filter', '$windo
|
|||
}
|
||||
|
||||
$scope.loadCardData = function() {
|
||||
console.log('loadCardData.........')
|
||||
if (!$scope.loadBusy) {
|
||||
console.log('loadCardData.........')
|
||||
var menusScope = $('div[ng-controller="menuCtr"]').scope();
|
||||
var login = (menusScope && menusScope.login) || false;
|
||||
if (login) {
|
||||
getBookmarks();
|
||||
getHotBookmarks();
|
||||
} else {
|
||||
toastr.remove();
|
||||
$scope.toastrId = toastr.info('想要查看更多热门标签,请先登录!', "提示");
|
||||
|
|
@ -113,7 +117,19 @@ app.controller('hotCtr', ['$scope', '$state', '$stateParams', '$filter', '$windo
|
|||
}
|
||||
}
|
||||
|
||||
function getBookmarks() {
|
||||
function getHotBookmarks() {
|
||||
getHotBookmarksbyAPI(); // 先实时获取,实时获取失败再从缓存中获取
|
||||
|
||||
var menusScope = $('div[ng-controller="menuCtr"]').scope();
|
||||
var login = (menusScope && menusScope.login) || false;
|
||||
var index = login ? 4 : 2;
|
||||
pubSubService.publish('Common.menuActive', {
|
||||
login: login,
|
||||
index: index
|
||||
});
|
||||
}
|
||||
|
||||
function getHotBookmarksbyAPI() {
|
||||
$scope.loadBusy = true;
|
||||
var requireData = {
|
||||
userId: null,
|
||||
|
|
@ -122,7 +138,7 @@ app.controller('hotCtr', ['$scope', '$state', '$stateParams', '$filter', '$windo
|
|||
pageSize: 1000,
|
||||
sort: 'desc',
|
||||
renderType: 0,
|
||||
date: CurentDate($scope.curDay),
|
||||
date: curentDate($scope.curDay, "yyyy年M月d日"),
|
||||
idfa: "d4995f8a0c9b2ad9182369016e376278",
|
||||
os: "ios",
|
||||
osv: "9.3.5"
|
||||
|
|
@ -144,13 +160,14 @@ app.controller('hotCtr', ['$scope', '$state', '$stateParams', '$filter', '$windo
|
|||
var b = {};
|
||||
b.title = bookmark.title;
|
||||
b.url = bookmark.url;
|
||||
b.favicon = bookmark.sourceLogo;
|
||||
b.from = bookmark.sourceName;
|
||||
b.image = alterImg;
|
||||
b.favicon_url = bookmark.sourceLogo;
|
||||
b.created_by = bookmark.sourceName;
|
||||
if (bookmark.imageList.length >= 1) {
|
||||
b.image = (json.data.pageNo == 1 ? (bookmark.imageList[0].url.match(alterRex) != null ? alterImg : bookmark.imageList[0].url) : alterImg);
|
||||
b.snap_url = (json.data.pageNo == 1 ? (bookmark.imageList[0].url.match(alterRex) != null ? alterImg : bookmark.imageList[0].url) : alterImg);
|
||||
} else {
|
||||
b.snap_url = alterImg;
|
||||
}
|
||||
b.click_count = bookmark.favCount;
|
||||
b.fav_count = bookmark.favCount;
|
||||
b.created_at = $filter('date')(new Date(bookmark.updatetime), "yyyy-MM-dd HH:mm:ss");
|
||||
b.last_click = $filter('date')(new Date(bookmark.createtime), "yyyy-MM-dd HH:mm:ss");
|
||||
b.id = bookmark.id;
|
||||
|
|
@ -160,36 +177,53 @@ app.controller('hotCtr', ['$scope', '$state', '$stateParams', '$filter', '$windo
|
|||
})
|
||||
$scope.curDay--;
|
||||
} else {
|
||||
toastr.error('获取热门书签失败!失败原因:' + json.message, "提示");
|
||||
toastr.error('获取热门书签失败!失败原因:' + json.message + "。将尝试从缓存中获取!", "提示");
|
||||
getHotBookmarksbyCache();
|
||||
}
|
||||
}, 100);
|
||||
},
|
||||
error: function(json) {
|
||||
toastr.error('获取热门书签失败!失败原因:' + json.message, "提示");
|
||||
toastr.error('获取热门书签失败!失败原因:' + json.message + "。将尝试从缓存中获取!", "提示");
|
||||
$scope.loadBusy = false;
|
||||
getHotBookmarksbyCache();
|
||||
}
|
||||
});
|
||||
|
||||
var menusScope = $('div[ng-controller="menuCtr"]').scope();
|
||||
var login = (menusScope && menusScope.login) || false;
|
||||
var index = login ? 4 : 2;
|
||||
pubSubService.publish('Common.menuActive', {
|
||||
login: login,
|
||||
index: index
|
||||
});
|
||||
}
|
||||
|
||||
function CurentDate(i) {
|
||||
function getHotBookmarksbyCache() {
|
||||
var params = {
|
||||
date: curentDate($scope.curDay, "yyyyMMdd"),
|
||||
}
|
||||
$scope.loadBusy = true;
|
||||
bookmarkService.getHotBookmarks(params)
|
||||
.then((data) => {
|
||||
data.forEach((bookmark) => {
|
||||
bookmark.created_at = $filter('date')(new Date(bookmark.updatetime), "yyyy-MM-dd HH:mm:ss");
|
||||
bookmark.last_click = $filter('date')(new Date(bookmark.createtime), "yyyy-MM-dd HH:mm:ss");
|
||||
bookmark.edit = false;
|
||||
$scope.bookmarks.push(bookmark);
|
||||
})
|
||||
$scope.curDay--;
|
||||
$scope.loadBusy = false;
|
||||
})
|
||||
.catch((err) => {
|
||||
toastr.error("getHotBookmarksbyCache: " + JSON.stringify(err), "提示");
|
||||
$scope.curDay--;
|
||||
$scope.loadBusy = false;
|
||||
});
|
||||
}
|
||||
|
||||
function curentDate(i, format) {
|
||||
if (i == undefined) {
|
||||
i = 0;
|
||||
}
|
||||
if (format == undefined) {
|
||||
format = 'yyyyMMddhhmmss'
|
||||
}
|
||||
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);
|
||||
clock = $filter('date')(now, format);
|
||||
return clock;
|
||||
}
|
||||
|
||||
function transition() {}
|
||||
|
|
|
|||
|
|
@ -312,6 +312,20 @@ app.factory('bookmarkService', ['$http', '$q', function($http, $q) {
|
|||
});
|
||||
return def.promise;
|
||||
},
|
||||
getHotBookmarks: function(params) {
|
||||
var def = $q.defer();
|
||||
|
||||
$http.get('/api/hotBookmarks/', {
|
||||
params: params
|
||||
})
|
||||
.success(function(data) {
|
||||
def.resolve(data);
|
||||
})
|
||||
.error(function(data, status) {
|
||||
def.reject('getHotBookmarks error');
|
||||
});
|
||||
return def.promise;
|
||||
},
|
||||
};
|
||||
|
||||
return service;
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@
|
|||
<div class="content">
|
||||
<div class="ui grid">
|
||||
<div class="six wide column">
|
||||
<img class="bordered" ng-src="{{bookmark.image}}" err-src="./images/snap/default.png"/>
|
||||
<img class="bordered" ng-src="{{bookmark.snap_url}}" err-src="./images/snap/default.png"/>
|
||||
</div>
|
||||
<div class="one wide column"></div>
|
||||
<div class="nine wide column">
|
||||
|
|
@ -15,7 +15,7 @@
|
|||
<div class="column">
|
||||
<img
|
||||
class="ui middle aligned mini image"
|
||||
ng-src="{{bookmark.favicon}}"
|
||||
ng-src="{{bookmark.favicon_url}}"
|
||||
style="width:16px;height:16px;padding:0;cursor:pointer;"
|
||||
ng-click="jumpToUrl(bookmark.url, bookmark.id)"
|
||||
favicon-err="./images/favicon/{{bookmark.id}}.ico"
|
||||
|
|
@ -32,9 +32,12 @@
|
|||
</div>
|
||||
</div>
|
||||
<div class="two column row">
|
||||
<div class="column">
|
||||
<div class="column" ng-if="bookmark.click_count">
|
||||
<i class="hand pointer icon"></i>点击次数:{{bookmark.click_count}}
|
||||
</div>
|
||||
<div class="column" ng-if="bookmark.fav_count">
|
||||
<i class="heart icon"></i>收藏人数:{{bookmark.fav_count}}
|
||||
</div>
|
||||
<div class="column">
|
||||
<i class="tags icon"></i>书签分类:
|
||||
<div class="ui label" ng-repeat="tag in bookmark.tags">
|
||||
|
|
|
|||
|
|
@ -7,12 +7,12 @@
|
|||
</div>
|
||||
</div>
|
||||
<div class="image hot-image" href="{{ bookmark.url }}" style="cursor:pointer" ng-click="jumpToUrl(bookmark.url)">
|
||||
<img ng-src="{{bookmark.image}}" err-src="./images/snap/default.png" />
|
||||
<img ng-src="{{bookmark.snap_url}}" err-src="./images/snap/default.png" />
|
||||
</div>
|
||||
<div class="extra content" ng-show="!bookmark.edit">
|
||||
<img class="ui avatar image" style="width:16px;height:16px;" ng-src="{{bookmark.favicon}}">
|
||||
<span class="sourceName">{{ bookmark.from }}</span>
|
||||
<span class="favCount">·{{ bookmark.click_count }}人收藏</span>
|
||||
<img class="ui avatar image" style="width:16px;height:16px;" ng-src="{{bookmark.favicon_url}}">
|
||||
<span class="sourceName">{{ bookmark.created_by }}</span>
|
||||
<span class="favCount">·{{ bookmark.fav_count }}人收藏</span>
|
||||
<i class="ellipsis horizontal icon right floated" style="margin-top:6px;"ng-mouseover="bookmark.edit=true;"></i>
|
||||
</div>
|
||||
<div class="extra content" ng-show="bookmark.edit" ng-mouseleave="bookmark.edit=false;">
|
||||
|
|
|
|||
|
|
@ -344,6 +344,21 @@ api.get('/bookmarks', function(req, res) {
|
|||
}
|
||||
});
|
||||
|
||||
api.get('/hotBookmarks', function(req, res) {
|
||||
console.log('hello hotBookmarks', JSON.stringify(req.query), req.session.username);
|
||||
if (!req.session.user) {
|
||||
res.send(401);
|
||||
return;
|
||||
}
|
||||
var userId = req.session.user.id;
|
||||
var params = req.query;
|
||||
var date = params.date || new Date().format('yyyyMMdd');;
|
||||
db.hotBookmarks(date)
|
||||
.then((bookmarks) => {
|
||||
res.json(bookmarks);
|
||||
})
|
||||
.catch((err) => console.log('hotBookmarks err', err))
|
||||
});
|
||||
|
||||
api.get('/bookmarksByTag', function(req, res) {
|
||||
console.log('hello bookmarksByTag', JSON.stringify(req.query), req.session.username);
|
||||
|
|
@ -1007,9 +1022,9 @@ api.getFaviconByTimer = function() {
|
|||
}, timeout);
|
||||
}
|
||||
|
||||
api.getHotBookmarks = function() {
|
||||
api.getHotBookmarksByTimer = function() {
|
||||
console.log('getHotBookmarks...........');
|
||||
var timeout = 1000 * 20;
|
||||
var timeout = 1000 * 60 * 10; // 10分钟更新一遍
|
||||
var busy = false;
|
||||
setInterval(function() {
|
||||
if (busy) {
|
||||
|
|
@ -1017,6 +1032,7 @@ api.getHotBookmarks = function() {
|
|||
return;
|
||||
}
|
||||
busy = true;
|
||||
console.log('begin getHotBookmarks...');
|
||||
var today = new Date();
|
||||
var requireData = {
|
||||
idfa: "d4995f8a0c9b2ad9182369016e376278",
|
||||
|
|
@ -1039,8 +1055,14 @@ api.getHotBookmarks = function() {
|
|||
form: requireData
|
||||
}, function(error, response, body) {
|
||||
if (response && response.statusCode == 200) {
|
||||
var inserCnt = 0;
|
||||
var data = JSON.parse(body).data;
|
||||
var bookmarks = [];
|
||||
|
||||
console.log("getHotBookmarks request call back", data.list.length);
|
||||
if (data.list.length == 0) {
|
||||
busy = false;
|
||||
}
|
||||
|
||||
data.list.forEach((b) => {
|
||||
var bookmark = {};
|
||||
bookmark.id = b.articleId;
|
||||
|
|
@ -1057,18 +1079,25 @@ api.getHotBookmarks = function() {
|
|||
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);
|
||||
inserCnt++;
|
||||
if (inserCnt == data.list.length) {
|
||||
busy = false;
|
||||
}
|
||||
})
|
||||
.catch((err) => {
|
||||
console.log('getHotBookmarks err', err);
|
||||
});
|
||||
inserCnt++;
|
||||
console.log('insertHotBookmarks err ', id, err);
|
||||
if (inserCnt == data.list.length) {
|
||||
busy = false;
|
||||
}
|
||||
|
||||
})
|
||||
});
|
||||
});
|
||||
} else {
|
||||
console.log("HotBookmarks request is error", error, response && response.statusCode);
|
||||
busy = false;
|
||||
}
|
||||
});
|
||||
}, timeout);
|
||||
|
|
|
|||
|
|
@ -75,9 +75,8 @@ CREATE TABLE `hot_bookmarks` (
|
|||
`created_by` varchar(64) DEFAULT NULL, -- 创建者(sourceName)
|
||||
`created_at` bigint DEFAULT 0, -- 创建时间(updatetime)
|
||||
`last_click` bigint DEFAULT 0, -- 最后一次点击时间(createtime)
|
||||
`snap_url` varchar(2048) DEFAULT NULL, -- 截图链接(imageList[0])
|
||||
`favicon_url` varchar(2048) DEFAULT NULL, -- icon链接(sourceLogo)
|
||||
`snap_url` varchar(1024) DEFAULT NULL, -- 截图链接(imageList[0])
|
||||
`favicon_url` varchar(1024) DEFAULT NULL, -- icon链接(sourceLogo)
|
||||
`status` tinyint(4) DEFAULT '0', -- 状态
|
||||
PRIMARY KEY (`id`),
|
||||
KEY `urlIdx` (`url`)
|
||||
PRIMARY KEY (`id`)
|
||||
);
|
||||
|
|
|
|||
Loading…
Reference in New Issue