private void MutipleScrapByRange(int _nMin, int _nMax) { if (_nMax <= _nMin) { System.Windows.Forms.MessageBox.Show("Mininum number should be lower than maxinum number."); return; } sb.AppendLine("key|nickname|description|total_songs|total_playlists|total_friends|song_name|artist|album"); bMultipleScrapMode = true; for (int i = _nMin; i <= _nMax; ++i) { ClearTheData(); LoginStatus = ELoginStatus.ReadyToFind; webTool.Navigate("http://www.melon.com/mymusic/main/mymusicmainother_list.htm?memberKey=" + i); while (LoginStatus != ELoginStatus.EverythingFound) // wait until everything is done { System.Windows.Forms.Application.DoEvents(); if (bDiscoverNonExistMember) { bDiscoverNonExistMember = false; break; } } } bMultipleScrapMode = false; File.WriteAllText("scrapped_" + txtStartRange.Text + "_to_" + txtEndRange.Text + ".csv", sb.ToString(), Encoding.UTF8); sb.Clear(); }
/// <summary> /// 注册用户,返回用户id /// </summary> /// <param name="openId"></param> /// <param name="userInfo"></param> /// <returns>用户id</returns> private string RegisterUser(string openId, OAuthUserInfo userInfo, out ELoginStatus status) { //todo 注册用户,返回用户id string loupanIds = ""; string job = ""; UserBll userBll = new UserBll(); PublicUserModel user = userBll.GetUserByOpenId(openId); if (user == null) { user = new PublicUserModel(); user.Name = userInfo.openid; user.Password = "******"; user.CityID = 592; user.DistrictId = 0; user.CompanyId = 0; user.StoreId = 0; user.RegionId = 0; user.Portrait = userInfo.headimgurl; //result.wxinfo.SelectToken("headimgurl").ToString(); user.VipType = 2; //会员类型 user.IP = Request.UserHostAddress; user.LastLoginIP = Request.UserHostAddress; user.NickName = userInfo.nickname; //wxinfo.SelectToken("nickname").ToString(); user.EnrolnName = userInfo.nickname; //wxinfo.SelectToken("nickname").ToString(); if (!string.IsNullOrEmpty(user.Name)) { int userid = userBll.addPublicUser(user); if (userid == -1) { //return Json(new { status = 1, msg = "用户名已经存在" }); } else if (userid == -2) { //return Json(new { status = 1, msg = "手机号已被注册" }); } //if (userid > 0)//自动登录 userBll.addPublicUserThirdInfo(userid, 1, userInfo.openid, userInfo.unionid); user.UserID = userid; status = ELoginStatus.Success; return(status == ELoginStatus.Success ? userid.ToString() : null); } } status = ELoginStatus.UserNotExist; return(""); }
private void Login() { txtID.IsEnabled = txtPW.IsEnabled = false; btnSignin.IsEnabled = false; LoginStatus = ELoginStatus.BeingProcessed; HtmlElement btnElement1 = webTool.Document.GetElementById("id"); HtmlElement btnElement2 = webTool.Document.GetElementById("pwd"); btnElement1.Focus(); SendKeys.SendWait(txtID.Text); btnElement2.Focus(); SendKeys.SendWait(txtPW.Password); HtmlElement btnElement3 = webTool.Document.GetElementById("btnLogin"); btnElement3.InvokeMember("click"); }
/// <summary> /// 添加 /// </summary> /// <param name="model"></param> /// <returns></returns> internal bool Add(BPMSEntities ctx, int systemId, string account, ELoginStatus loginStatus, string remark = "") { int rlt = 1; SysLoginLog model = new SysLoginLog(); model.ID = dal.GetNewID(); model.Account = account; model.SystemId = systemId; model.CreateDate = DateTime.Now; model.Status = loginStatus.GetHashCode(); var location = IPHelper.GetLocation(); model.IPAddress = location.GetIPAddress.ToString(); model.IPAddressName = location.ToString(); model.Remark = remark; if (!dal.Insert(ctx, model)) { rlt = 0; } return(rlt == 1); }
private int GetTheFirstNumberOfSongOfCurrentList() { if (webTool.Url.ToString().Contains(strInitURL)) { LoginStatus = ELoginStatus.ReadyToFind; } else if (webTool.Url.ToString().Contains("http://www.melon.com/mymusic/like/mymusiclikesong_list.htm?memberKey=")) { string strNum = ""; // Populate list List <HtmlElement> arrElements = new List <HtmlElement>(webTool.Document.GetElementsByTagName("tr").Cast <HtmlElement>()); foreach (HtmlElement EI in arrElements) { List <HtmlElement> arrElements2 = new List <HtmlElement>(EI.GetElementsByTagName("div").Cast <HtmlElement>()); if (arrElements2.Count == 16 || arrElements2.Count == 19) { strNum = arrElements2[1].InnerText; break; } } return(Convert.ToInt32(strNum)); } return(-1); }
private string RegisterUser(string openId, OAuthUserInfo userInfo) { ELoginStatus status = ELoginStatus.Success; return(RegisterUser(openId, userInfo, out status)); }
/// <summary> /// 取得用户信息 /// </summary> /// <param name="code"></param> /// <param name="state"></param> /// <returns></returns> public ActionResult UserInfoCallback(string code, string state) { if (string.IsNullOrEmpty(code)) { return(Content("您拒绝了授权!")); } if (state != STATE) { //这里的state其实是会暴露给客户端的,验证能力很弱,这里只是演示一下 //实际上可以存任何想传递的数据,比如用户ID,并且需要结合例如下面的Session["OAuthAccessToken"]进行验证 return(Content("验证失败!请从正规途径进入!")); } //通过,用code换取access_token var result = OAuthApi.GetAccessToken(appId, secret, code); if (result.errcode != ReturnCode.请求成功) { return(Content("错误:" + result.errmsg)); } //下面2个数据也可以自己封装成一个类,储存在数据库中(建议结合缓存) //如果可以确保安全,可以将access_token存入用户的cookie中,每一个人的access_token是不一样的 Session["OAuthAccessTokenStartTime"] = DateTime.Now; Session["OAuthAccessToken"] = result; //因为第一步选择的是OAuthScope.snsapi_userinfo,这里可以进一步获取用户详细信息 try { OAuthUserInfo userInfo = OAuthApi.GetUserInfo(result.access_token, result.openid); if (string.IsNullOrEmpty(Request["referer"])) { return(View(userInfo)); } if (userInfo == null || userInfo.nickname == null || result.openid != userInfo.openid) { return(Content("获取用户信息失败!")); } //判断用户是否存存 string userId = null; ELoginStatus status = ELoginStatus.Success; try { userId = GetUserIdByOpenId(result.openid); if (userId == null) { userId = RegisterUser(result.openid, userInfo, out status); } } catch (Exception ex) { } if (!LoginByUserId(userId)) { return(Content("登陆失败status:" + status.ToString() + " userId:" + userId)); } string referer = Request["referer"] ?? "/"; return(RedirectToUrl(referer)); } catch (ErrorJsonResultException ex) { return(Content(ex.Message)); } }
private void webBrowser_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e) { //SendKeys.Send("{ENTER}"); //LoginStatus = ELoginStatus.ReadyToFind; string strURL = e.Url.ToString(); if (strURL == "https://member.melon.com/muid/web/login/login_inform.htm") { if (bTryToStop) { bTryToStop = false; LoginStatus = ELoginStatus.ReadyToFind; } btnSignin.IsEnabled = true; List <HtmlElement> arrElements = ElementsByClass(webTool.Document, "txt_error").ToList(); if (arrElements.Count != 0) { // if there's error, prints error context and enable id, pw input box again. System.Windows.MessageBox.Show(arrElements[0].InnerText); txtID.IsEnabled = txtPW.IsEnabled = true; btnSignin.IsEnabled = true; txtPW.Focus(); txtPW.SelectAll(); LoginStatus = ELoginStatus.FailedWrongIDorPassword; } } if (strURL == "http://www.melon.com/") { if (bTryToStop) { webTool.Navigate("https://member.melon.com/muid/web/login/login_inform.htm"); return; } else if (bMultipleScrapMode) // when the scrapper discovers non-member's id { bDiscoverNonExistMember = true; return; } LoginStatus = ELoginStatus.SeekingYourMusicRoom; this.webTool.Navigate("javascript: MELON.WEBSVC.POC.menu.goMyMusicMain();"); } else if (strURL.Contains("http://www.melon.com/mymusic/main/mymusicmain_list.htm?memberKey=") || // when retreiving my music room strURL.Contains("http://www.melon.com/mymusic/main/mymusicmainother_list.htm?memberKey=")) // when retreiving another melon user's music room { LoginStatus = ELoginStatus.SeekingYourFavoriteMusics; int nIndexOfDelm = strURL.IndexOf('=') + 1; UserInfo.strMemberkey = strURL.Substring(nIndexOfDelm, strURL.Length - nIndexOfDelm); List <HtmlElement> arrUserInfo = ElementsByClass(webTool.Document, "nicnmname").ToList(); if (arrUserInfo.Count != 0) { List <HtmlElement> arrHE1 = new List <HtmlElement>(arrUserInfo[0].GetElementsByTagName("dt").Cast <HtmlElement>()); List <HtmlElement> arrHE2 = new List <HtmlElement>(arrUserInfo[0].GetElementsByTagName("dd").Cast <HtmlElement>()); List <HtmlElement> arrHE3 = new List <HtmlElement>(arrUserInfo[0].GetElementsByTagName("a").Cast <HtmlElement>()); if (arrHE1.Count != 0) { UserInfo.strNickName = arrHE1[0].InnerText; } if (arrHE2.Count != 0) { UserInfo.strDescription = arrHE2[0].InnerText; } if (arrHE3.Count >= 3) { UserInfo.nTotalLikeSongs = ConvertOnlyNumber(arrHE3[0].InnerText); UserInfo.nTotalPlaylists = ConvertOnlyNumber(arrHE3[1].InnerText); UserInfo.nTotalFriendLists = ConvertOnlyNumber(arrHE3[2].InnerText); } txtUserInfo.Text = UserInfo.BuildTheString("\r\n"); } webTool.Navigate("javascript: mymusic.mymusicLink.goLikeSong('" + UserInfo.strMemberkey + "');"); } else if (strURL.Contains("http://www.melon.com/mymusic/like/mymusiclikesong_list.htm?memberKey=")) { LoginStatus = ELoginStatus.MakingListOfYourFavoriteSongs; GetFavoriteSongList(); //btnGetList.IsEnabled = !string.IsNullOrEmpty(strMemberkey); } else if (strURL.Contains("https://member.melon.com/muid/web/login/login_informExpire.htm")) { LoginStatus = ELoginStatus.FailedExpireID; System.Windows.MessageBox.Show("비밀번호를 5회 이상 잘못 입력하셨습니다.\n홈페이지에서 비밀번호 찾기를 통해 본인확인 후 비밀번호를 재설정하여 이용하시기 바랍니다.\n변경 후, 프로그램은 재시작해주세요."); } else { Debug.Print(strURL); } }
private void GetFavoriteSongList() { const int nSongCountOfEachPage = 20; int nTotalCount = UserInfo.nTotalLikeSongs;//Convert.ToInt32(webTool.Document.GetElementById("totCnt").InnerText); int nPageCount = (int)Math.Ceiling((double)nTotalCount / nSongCountOfEachPage); PGB_browser.Maximum = nPageCount; for (int i = 0; i < nPageCount; ++i) { if (bTryToStop) { return; } int TargetPage = (i * nSongCountOfEachPage + 1); string str = "javascript: pageObj.sendPage('" + TargetPage + "');"; webTool.Navigate(str); while (GetTheFirstNumberOfSongOfCurrentList() != TargetPage) { System.Windows.Forms.Application.DoEvents(); } PGB_browser.Value = i; // Populate list List <HtmlElement> arrElements = new List <HtmlElement>(webTool.Document.GetElementsByTagName("tr").Cast <HtmlElement>()); foreach (HtmlElement EI in arrElements) { List <HtmlElement> arrElements2 = new List <HtmlElement>(EI.GetElementsByTagName("a").Cast <HtmlElement>()); //List<HtmlElement> arrElements2_ = new List<HtmlElement>(EI.GetElementsByTagName("div").Cast<HtmlElement>()); if (arrElements2.Count == 5) { string strName = arrElements2[1].InnerText; string strArtist = arrElements2[2].InnerText; string strAlbum = arrElements2[4].InnerText; this.lstFavorites.Items.Add(new SongListItem { Name = strName, Artist = strArtist, Album = strAlbum }); this.RelectingToTheDictionary(strName, strArtist); } } } LoginStatus = ELoginStatus.EverythingFound; var myList = m_dArtistSeries.ToList(); myList.Sort((pair1, pair2) => pair2.Value.CompareTo(pair1.Value)); { foreach (SongListItem SLI in lstFavorites.Items) { sb.AppendLine(UserInfo.BuildTheString("|") + "|" + SLI.Name + "|" + SLI.Artist + "|" + SLI.Album); } } // during the multiple scrapping mode, chart is disabled. if (bMultipleScrapMode == false) { int nCount = 0; const int nMAX = 5; foreach (KeyValuePair <string, int> entry in myList) { if (nMAX == nCount++) { break; } VM_Chart.AnalData1.Add(new Artists() { Category = entry.Key, Number = entry.Value }); } GridForPieChart.Visibility = Visibility.Visible; } }