/// <summary> /// 해당 학생의 개인정보를 강제로 갱신합니다. /// </summary> public void GetUserInfo() { if (LoginOk == false) { return; // 마지막 로그인을 실패했을경우 } // Account table에서 해당 유저의 정보가 있는지 확인 MysqlNode node = new MysqlNode(GachonOption.MysqlOption, "SELECT * FROM account WHERE id = ?ID"); //수정? node["ID"] = ID; using (node.ExecuteReader()) { node.Read(); StudentNumber = node.GetString("studentnumber"); // 바로 Database에서 얻어온 tuple 정보로 학생 정보를 저장 if ((!String.IsNullOrEmpty(StudentNumber)) && Int32.Parse(StudentNumber) != 0) { Name = node.GetString("name"); Email = node.GetString("email"); Phone = node.GetString("phone"); Department = node.GetString("department"); } else { // DB에 없다면 사이버캠퍼스 홈페이지에 들어가서 유저의 정보를 읽어옴 HtmlDocument data = WebPacket.Web_GET_Html(Encoding.UTF8, cookie, "https://cyber.gachon.ac.kr/user/user_edit.php"); StudentNumber = data.DocumentNode.SelectSingleNode("//div[@class='felement fstatic']").InnerText; Name = data.GetElementbyId("id_firstname").Attributes["value"].Value; Email = data.GetElementbyId("id_email").Attributes["value"].Value; Phone = data.GetElementbyId("id_phone2").Attributes["value"].Value; Department = data.DocumentNode.SelectSingleNode("//p[@class='department']").InnerText; // 읽은 후 그 정보를 Databse account 테이블에 저장해줌 MysqlNode insert = new MysqlNode(GachonOption.MysqlOption, "UPDATE account SET studentnumber = ?num, name = ?name, department = ?dept" + ",phone = ?phone , email = ?email where id = ?id "); insert["id"] = ID; insert["num"] = StudentNumber; insert["name"] = Name; insert["dept"] = Department; insert["phone"] = Phone; insert["email"] = Email; insert.ExecuteNonQuery(); } } }
public HtmlDocument VisitPage(string url, Encoding encoding = null) { if (encoding == null) { encoding = Encoding.UTF8; } HtmlDocument dom = WebPacket.Web_GET_Html(encoding, cookie, url); if (dom == null) { throw new NoConnectPageError(url); } else { return(dom); } }
/// <summary> /// 로그인 세션을 강제로 실행시킵니다. /// 주의: 각 함수에서 로그인 세션을 유지되는지 확인후 자동으로 실행하기때문에 따로 이 함수를 실행하지 않아도 됨. /// </summary> public void Login() { // 가천대 로그인페이지 접근 시도/ (sson.kyungwon.ac.kr)에서 세션값을 가져오는 과정(GID 오류때문에 반드시 필요) VisitPage("https://www.gachon.ac.kr/site/login.jsp"); string a = WebPacket.Web_POST(cookie, "https://sson.kyungwon.ac.kr/sso/pmi-sso-login-uid-password2.jsp", "https://www.gachon.ac.kr/site/login_sso.jsp", "return_url=&uid=" + ID + "&password="******"&x=41&y=20"); // 가천대 서버에 접속하지 못한경우 로그인 실패 if (a == null) { return; } if (a.IndexOf("location.href='https://www.gachon.ac.kr:443/site/login.jsp'") >= 0) { // 사이버 캠퍼스에 로그인을 하면서 강의 정보 불러옴. HtmlDocument data = WebPacket.Web_POST_Html(cookie, "https://cyber.gachon.ac.kr/login/index.php", "https://cyber.gachon.ac.kr/login.php", "username="******"&password="******"SELECT id FROM account WHERE id = ?id"); search_id["id"] = ID; bool First_Login = false; using (search_id.ExecuteReader()) { if (!search_id.Read()) { MysqlNode idnode = new MysqlNode(GachonOption.MysqlOption, "INSERT INTO account (id) VALUES (?id) "); idnode["id"] = ID; idnode.ExecuteNonQuery(); First_Login = true; } } if (First_Login) // 첫 접속시 수강중인 강의를 새로 등록 { List <GachonClass> need_eclass_info = new List <GachonClass>(); foreach (HtmlNode node in data.DocumentNode.SelectNodes("//div[@class='course_box']")) { JObject box = ParseSupport.CyberCampusTitle(node.SelectSingleNode(".//div[@class='course-title']/h3").InnerText); string title = (string)box["title"]; string key = (string)box["key"]; lock (GachonObjects.AllClass) { if (!GachonObjects.AllClass.ContainsKey(key)) { GachonClass newclass = GachonClass.GetObject(title, key, true); JObject urlq = ParseSupport.UrlQueryParser(node.SelectSingleNode(".//a[@class='course_link']").Attributes["href"].Value); newclass.CombineSite(new GachonCyberCampus(urlq["id"].ToString())); need_eclass_info.Add(newclass); } MysqlNode insertNode = new MysqlNode(GachonOption.MysqlOption, "INSERT into takes_course(student_id, course_no) values (?id, ?course_no)"); insertNode["id"] = ID; insertNode["course_no"] = key; insertNode.ExecuteNonQuery(); CombineClass(GachonObjects.AllClass[key]); } } HtmlDocument eclassinfo = null; if (need_eclass_info.Count > 0) { eclassinfo = WebPacket.Web_GET_Html(Encoding.UTF8, cookie, "http://eclass.gachon.ac.kr/index.jsp"); } // 새로운 클래스가 생겼으니 eclass 정보를 읽어서 새로 생긴 클래스와 연결한다. foreach (GachonClass newclass in need_eclass_info) { HtmlNode node = eclassinfo.DocumentNode.SelectSingleNode("//a[@title=" + newclass.ID + newclass.Sec_ID + "]"); if (node != null) { string e_id = ParseSupport.UrlQueryParser(node.Attributes["href"].Value)["Forum_seq"].ToString(); newclass.CombineSite(new GachonEClass(e_id)); } } } else // 첫 접속이 아니면 기존 강의목록을 연결한다. { MysqlNode search_course = new MysqlNode(GachonOption.MysqlOption, "SELECT course_no FROM takes_course WHERE student_id = ?id"); search_course["id"] = ID; using (search_course.ExecuteReader()) { while (search_course.Read()) { CombineClass(GachonObjects.AllClass[search_course.GetString("course_no")]); } } } // 카페 도메인에도 세션을 만들어줌. 없을경우 처음 카페 접속시 리다이렉션 걸림. VisitPage("http://cafe.gachon.ac.kr"); LoginOk = true; } else { LoginOk = false; } }