Пример #1
0
        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();
        }
Пример #2
0
        /// <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("");
        }
Пример #3
0
        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");
        }
Пример #4
0
        /// <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);
        }
Пример #5
0
 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);
 }
Пример #6
0
        private string RegisterUser(string openId, OAuthUserInfo userInfo)
        {
            ELoginStatus status = ELoginStatus.Success;

            return(RegisterUser(openId, userInfo, out status));
        }
Пример #7
0
        /// <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));
            }
        }
Пример #8
0
        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);
            }
        }
Пример #9
0
        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;
            }
        }