@@ -42,66 +42,63 @@ function numberToChinses(chnStr) {
4242}
4343// 獲取頁面
4444exports . 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// 獲取文章
125127exports . 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+ }
0 commit comments