using System.Collections.Specialized;
using System.Collections.Generic;
public static int daysAfter = 2;
public static List<record> resvBooks = new List<record>();
public static void Main()
Console.Write("Please input the key => ");
var key = Console.ReadLine();
var super = DoCheck("Q121141439",key)
.Concat(DoCheck("F131877206",key))
.Concat(DoCheck("T222397538",key))
.Concat(DoCheck("O100783375",key))
Console.WriteLine("\n應歸邏書籍共 "+super.Count().ToString() + " 本");
foreach(var item in super){
string reserveMsg = "X無法續借";
if(item.ReserveCnt=="0"){
Console.WriteLine("["+reserveMsg+"]"+item.ExpireDate.ToString("yyyy/MM/dd")+":"+item.Acc+":"+item.BookName);
Console.WriteLine("==========================");
Console.WriteLine("預約書籍共 "+resvBooks.Count().ToString()+ " 本");
foreach(var item in resvBooks){
Console.WriteLine(item.KeepInfo+":"+item.Acc+":"+item.BookName);
private static List<record> DoCheck(string acc,string key){
var client = new CookieAwareWebClient();
var s = client.DownloadString(@"https://webpac.hcml.gov.tw/");
client.BaseAddress = @"https://webpac.hcml.gov.tw/personalization/";
var loginData = new NameValueCollection();
loginData.Add("goVar", "-2");
loginData.Add("returnxItem", "");
loginData.Add("account2", acc);
loginData.Add("passwd2", key);
client.UploadValues("memberLoginAct.do", "POST", loginData);
var dlData = new NameValueCollection();
dlData.Add("functionName","LendList");
dlData.Add("pageCode","0001");
dlData.Add("countType","all");
dlData.Add("outputType","save");
dlData.Add("dispType","list");
dlData.Add("fileType","csv");
byte[] responseArray = client.UploadValues("exportPersonDataAct.do",dlData);
var data = Encoding.UTF8.GetString(responseArray).Split(
List<record> book = new List<record>();
for(int i=1;i<data.Length;i++){
var detail = data[i].Replace("\",\"","^").Split('^');
BookName = detail[0].Replace("\"","")+"("+detail[3]+")",
ExpireDate = Convert.ToDateTime(detail[5].Replace("\"","")),
var chkItem = book.Where(c=>DateTime.Today.AddDays(daysAfter).CompareTo(c.ExpireDate) >= 0 ).ToList();
dlData = new NameValueCollection();
dlData.Add("functionName","ReserveList");
dlData.Add("pageCode","0001");
dlData.Add("countType","all");
dlData.Add("outputType","save");
dlData.Add("dispType","list");
dlData.Add("fileType","csv");
responseArray = client.UploadValues("exportPersonDataAct.do",dlData);
data = Encoding.UTF8.GetString(responseArray).Split(
book = new List<record>();
for(int i=1;i<data.Length;i++){
var detail = data[i].Replace("\",\"","^").Split('^');
if(detail.Length >7 && detail[7]!="") {
resvBooks.Add(new record { Acc = acc,
BookName = detail[0].Replace("\"","")+"("+detail[3]+")",
client.UploadValues("logout.jsp", "POST", new NameValueCollection());
public class CookieAwareWebClient : WebClient
private CookieContainer cookie = new CookieContainer();
protected override WebRequest GetWebRequest(Uri address)
WebRequest request = base.GetWebRequest(address);
if (request is HttpWebRequest)
(request as HttpWebRequest).CookieContainer = cookie;
public string BookName {get;set;}
public DateTime ExpireDate {get;set;}
public string Acc {get;set;}
public string KeepInfo {get;set;}
public string RelendCnt {get;set;}
public string ReserveCnt {get;set;}