Skip to content
This repository was archived by the owner on Feb 4, 2021. It is now read-only.

Commit 31305af

Browse files
author
gnehs
committed
API 化請求功能,方便串接其他好朋友
1 parent 393147e commit 31305af

2 files changed

Lines changed: 111 additions & 92 deletions

File tree

TLHCrequest.js

Lines changed: 109 additions & 90 deletions
Original file line numberDiff line numberDiff line change
@@ -42,66 +42,63 @@ function numberToChinses(chnStr) {
4242
}
4343
// 獲取頁面
4444
exports.getPage = async function(url, pageID, res) {
45-
//請求
45+
let data = await getPage(url)
46+
if (data == 404) return res.status(404).render('error', { title: '錯誤 - 404', message: '看來我們找不到您要的東西' })
47+
if (data == 'May be an article') return res.render('error', {
48+
title: '錯誤 - 這不是一個目錄頁面',
49+
message: '也許你該試試下面的連結',
50+
button: '嘗試使用文章模板',
51+
buttonLink: '/tlhc/post/' + Base64.encodeURI(pageID)
52+
})
53+
res.render('tlhc', { title: data.pageTitle, tlhc: data.posts, pages: data.pagination, originalURL: url })
54+
55+
};
56+
57+
async function getPage(url) { //請求
4658
let PageData = await doRequest({
4759
url: url,
4860
method: "GET",
4961
headers: { 'User-Agent': userAgent }
5062
});
5163
//沒拿到資料
52-
if (!PageData) {
53-
res.status(404).render('error', { title: '錯誤 - 404', message: '看來我們找不到您要的東西' })
54-
return;
55-
}
64+
if (!PageData) return '404';
5665
//可能是文章模板
57-
if (PageData.indexOf('資料群組') == -1 && PageData.indexOf('標題') == -1 && PageData.indexOf('日期') == -1) {
58-
res.render('error', {
59-
title: '錯誤 - 這不是一個目錄頁面',
60-
message: '也許你該試試下面的連結',
61-
button: '嘗試使用文章模板',
62-
buttonLink: '/tlhc/post/' + Base64.encodeURI(pageID)
63-
})
64-
return;
65-
}
66-
var $ = cheerio.load(PageData);
66+
if (!PageData.match(/||/)) return 'May be an article';
6767

68-
var author = $("#Dyn_2_2 .md_middle table tbody tr td:nth-child(1)");
69-
var title = $("#Dyn_2_2 .md_middle table tbody tr td:nth-child(2)");
70-
var link = $("#Dyn_2_2 .md_middle table tbody tr td:nth-child(2) a");
71-
var date = $("#Dyn_2_2 .md_middle table tbody tr td:nth-child(3)");
72-
var pages = $(".navigator-inner a.pagenum");
68+
let $ = cheerio.load(PageData);
7369

74-
var pgTitle = 'ㄉㄌㄐㄕ - ' + $('#Dyn_2_1 .md_middle .mm_01 a.path:nth-child(2)').html()
70+
let pageTitle = 'ㄉㄌㄐㄕ - ' + $('#Dyn_2_1 .md_middle .mm_01 a.path:nth-child(2)').text()
71+
let author = $("#Dyn_2_2 .md_middle table tbody tr td:nth-child(1)");
72+
let title = $("#Dyn_2_2 .md_middle table tbody tr td:nth-child(2)");
73+
let link = $("#Dyn_2_2 .md_middle table tbody tr td:nth-child(2) a");
74+
let date = $("#Dyn_2_2 .md_middle table tbody tr td:nth-child(3)");
75+
let pages = $(".navigator-inner a.pagenum");
7576

76-
var pgid = pageID.split("-")[2]
77-
if (pgid == 246) {
78-
// 這頁不知道為啥一直出錯 Orz
79-
// http://web.tlhc.ylc.edu.tw/files/11-1004-246-2.php
80-
res.status(404).render('error', { title: '錯誤 - 404', message: '看來我們找不到您要的東西' })
81-
return
82-
}
8377
// 獲取頁碼
84-
var pageData = [];
78+
let pagination = [];
8579
for (var i = 0; i < pages.length; i++) {
86-
var preJoin = {
80+
pagination.push({
8781
'text': $(pages[i]).text(),
82+
'title': $(pages[i]).text(),
8883
'link': Base64.encodeURI($(pages[i]).attr('href').split("/")[4]),
89-
}
90-
pageData.push(preJoin);
84+
'url': $(pages[i]).attr('href'),
85+
});
9186
}
9287
// 獲取文章
93-
var tlhcData = [];
88+
let posts = [];
9489
for (var i = 0; i < author.length; i++) {
9590
let time = numberToChinses(moment($(date[i]).text().trim(), 'YYYY/MM/DD').fromNow())
96-
var preJoin = {
91+
posts.push({
92+
'author': $(author[i]).text().trim(),
93+
'datefromnow': time,
94+
'date': $(date[i]).text().trim(),
95+
'link': '/tlhc/post/' + Base64.encodeURI($(link[i]).attr('href').split("/files/")[1]),
9796
'tags': [time, $(author[i]).text().trim(), $(date[i]).text().trim()],
9897
'title': $(title[i]).text().replace(/\n/g, ''),
99-
'link': '/tlhc/post/' + Base64.encodeURI($(link[i]).attr('href').split("/files/")[1]),
100-
}
101-
tlhcData.push(preJoin);
98+
'url': $(link[i]).attr('href'),
99+
});
102100
}
103-
res.render('tlhc', { title: pgTitle, tlhc: tlhcData, pages: pageData, originalURL: url })
104-
/*var ajaxcode = $('#Dyn_2_2 script[language="javascript"]').html()
101+
/*var ajaxcode = $('#Dyn_2_2 script[language="javascript"]').html()
105102
if (ajaxcode.indexOf('divOs.openSajaxUrl("Dyn_2_2"') > -1) {
106103
//這是需要 post 請求的頁面
107104
ajaxcode = ajaxcode.split("'")[1]
@@ -120,34 +117,54 @@ exports.getPage = async function(url, pageID, res) {
120117
if (e || !b) { return }
121118
})
122119
}*/
123-
};
120+
return {
121+
"pagination": pagination,
122+
"posts": posts,
123+
"pageTitle": pageTitle
124+
}
125+
}
124126
// 獲取文章
125127
exports.getPost = async function(url, pageID, res) {
126128

129+
let data = await getPost(url)
130+
if (data == 404)
131+
return res.status(404).render('error', { title: '錯誤 - 404', message: '看來我們找不到您要的東西' })
132+
if (data == 'May be a directory')
133+
return res.render('error', {
134+
title: '錯誤 - 這不是一個文章頁面',
135+
message: '也許你該試試下面的連結',
136+
button: '嘗試使用目錄模板',
137+
buttonLink: '/tlhc/pages/' + pageID
138+
})
139+
res.render('tlhc-view', {
140+
title: 'ㄉㄌㄐㄕ - ' + data.title,
141+
tlhc: {
142+
'title': data.title,
143+
'content': data.content
144+
},
145+
files: data.files,
146+
originalURL: url,
147+
headerTitle: excerpt.text(data.title, 25, '...')
148+
})
149+
};
150+
151+
async function getPost(url) { //請求
127152
//請求
128153
let PostData = await doRequest({
129154
url: url,
130155
method: "GET",
131156
headers: { 'User-Agent': userAgent }
132157
});
133158
//沒資料
134-
if (!PostData) {
135-
res.status(404).render('error', { title: '錯誤 - 404', message: '看來我們找不到您要的東西' })
136-
return;
137-
}
159+
if (!PostData)
160+
return 404
161+
138162
//可能是目錄
139-
if (PostData.indexOf('資料群組') != -1 && PostData.indexOf('標題') != -1 && PostData.indexOf('日期') != -1) {
140-
res.render('error', {
141-
title: '錯誤 - 這不是一個文章頁面',
142-
message: '也許你該試試下面的連結',
143-
button: '嘗試使用目錄模板',
144-
buttonLink: '/tlhc/pages/' + pageID
145-
})
146-
return;
147-
}
163+
if (PostData.match(/||/))
164+
return 'May be a directory'
165+
148166
var $ = cheerio.load(PostData);
149167
var title = $('title').text().replace(/- /, '')
150-
var headerTitle = excerpt.text(title, 25, '...')
151168
//設定內容範圍
152169
var ajaxcode = $('#Dyn_2_2 script[language="javascript"]').html()
153170
if (ajaxcode && ajaxcode.indexOf('divOs.openSajaxUrl("Dyn_2_2"') > -1) {
@@ -176,71 +193,75 @@ exports.getPost = async function(url, pageID, res) {
176193
else
177194
var content = $("#Dyn_2_2 .ptcontent").html().trim();
178195
}
179-
var files = $('.baseTB a');
180-
var fileData = [];
196+
let files = $('.baseTB a');
197+
let filesData = [];
181198
for (var i = 0; i < files.length; i++) {
182199
if ($(files[i]).text() != "下載附件") {
183-
var file = $(files[i]).attr('href')
184-
if ($(files[i]).attr('href') == 'javascript:void(0)') {
185-
var file = $(files[i]).attr('onclick').split("'")[3]
186-
}
187-
var preJoin = {
200+
let fileLink = $(files[i]).attr('href') == 'javascript:void(0)' ? $(files[i]).attr('onclick').split("'")[3] : $(files[i]).attr('href')
201+
filesData.push({
188202
'name': $(files[i]).text(),
189-
'file': 'http://web.tlhc.ylc.edu.tw' + file,
190-
'type': file.split(".")[1],
191-
}
192-
fileData.push(preJoin);
203+
'link': 'http://web.tlhc.ylc.edu.tw' + fileLink,
204+
'type': fileLink.split(".")[1],
205+
});
193206
}
194207
}
195208

196-
var tlhcData = {
197-
'title': title,
198-
'content': content
209+
return {
210+
"title": title,
211+
"content": content,
212+
"files": filesData
199213
}
200-
res.render('tlhc-view', {
201-
title: 'ㄉㄌㄐㄕ - ' + title,
202-
tlhc: tlhcData,
203-
files: fileData,
204-
originalURL: url,
205-
headerTitle: headerTitle
214+
}
215+
216+
// 搜尋
217+
exports.search = async function(keyword, res, page) {
218+
let data = await searchPosts(keyword, page)
219+
if (data == 'no result') return res.render('tlhc-search', { title: 'ㄉㄌㄐㄕ - 搜尋' })
220+
res.render('tlhc-search', {
221+
title: 'ㄉㄌㄐㄕ - 搜尋:' + keyword,
222+
tlhc: data.posts,
223+
pages: data.pageData,
224+
search: keyword
206225
})
207226
};
208-
// 搜尋
209-
exports.search = async function(search, res, page) {
227+
async function searchPosts(keyword, page) {
228+
let SearchData;
210229
if (page == "1") {
211-
var SearchData = await doRequest({
230+
SearchData = await doRequest({
212231
url: "http://web.tlhc.ylc.edu.tw/bin/ptsearch.php",
213232
method: "POST",
214233
form: {
215-
SchKey: search,
234+
SchKey: keyword,
216235
search: "search"
217236
},
218237
headers: { 'User-Agent': userAgent }
219238
});
220239
} else {
221-
var SearchData = await doRequest({
222-
url: 'http://www.tlhc.ylc.edu.tw/bin/ptsearch.php?P=' + page + '&T=66&wc=a%3A3%3A{s%3A3%3A%22Key%22%3Bs%3A6%3A%22' + encodeURIComponent(search) + '%22%3Bs%3A8%3A%22pagesize%22%3Bs%3A2%3A%2210%22%3Bs%3A3%3A%22Rcg%22%3Bi%3A0%3B}',
240+
SearchData = await doRequest({
241+
url: 'http://www.tlhc.ylc.edu.tw/bin/ptsearch.php?P=' + page + '&T=66&wc=a%3A3%3A{s%3A3%3A%22Key%22%3Bs%3A6%3A%22' + encodeURIComponent(keyword) + '%22%3Bs%3A8%3A%22pagesize%22%3Bs%3A2%3A%2210%22%3Bs%3A3%3A%22Rcg%22%3Bi%3A0%3B}',
223242
method: "GET",
224243
headers: { 'User-Agent': userAgent }
225244
});
226245
}
227246
var $ = cheerio.load(SearchData);
228-
//var table = $(".baseTB.list_TIDY");
229247
//文章內容
230248
var tlhcData = [];
231249
var header = $(".baseTB.list_TIDY tr>td.mc .h5 a");
232250
var content = $(".baseTB.list_TIDY tr>td.mc .message");
233251
if (content == undefined) {
234-
res.render('tlhc-search', { title: 'ㄉㄌㄐㄕ - 搜尋' })
235-
return
252+
return 'no result'
236253
}
237254
for (var i = 0; i < header.length; i++) {
238255
let timePrecision = $(content[i]).text().match(/[0-9]{4}\/[0-9]{2}\/[0-9]*/).pop()
239256
let timeSimple = numberToChinses(moment(timePrecision, 'YYYY/MM/DD').fromNow())
240257
var preJoin = {
241258
'header': $(header[i]).text(),
259+
'title': $(header[i]).text(),
242260
'content': $(content[i]).text().split(/[0-9]{4}\/[0-9]{2}\/[0-9]*/)[0],
243261
'tags': [timeSimple, timePrecision],
262+
'url': $(header[i]).attr('href'),
263+
'date': timePrecision,
264+
'datefromnow': timeSimple,
244265
'link': '/tlhc/post/' + Base64.encodeURI($(header[i]).attr('href').split("/")[4])
245266
}
246267
tlhcData.push(preJoin);
@@ -255,10 +276,8 @@ exports.search = async function(search, res, page) {
255276
}
256277
pageData.push(preJoin);
257278
}
258-
res.render('tlhc-search', {
259-
title: 'ㄉㄌㄐㄕ - 搜尋:' + search,
260-
tlhc: tlhcData,
261-
pages: pageData,
262-
search: search
263-
})
264-
};
279+
return {
280+
"pagination": pageData,
281+
"posts": tlhcData
282+
}
283+
}

views/tlhc-view.pug

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,9 @@ block content
2020
.header=file.name
2121
.actions
2222
.ts.buttons
23-
a.ts.button(href=file.file,download=file.name) 下載
23+
a.ts.button(href=file.link,download=file.name) 下載
2424
.or
25-
a.ts.primary.button(href='https://docs.google.com/viewer?url='+file.file,target="_blank") 預覽
25+
a.ts.primary.button(href='https://docs.google.com/viewer?url='+encodeURIComponent(file.link),target="_blank") 預覽
2626

2727

2828
button.ts.primary.labeled.icon.button(onclick='history.back()')

0 commit comments

Comments
 (0)