Flickr 自动化适用于 Flickr API 中不可用的操作(例如添加联系人)

发布于 2024-08-18 03:14:29 字数 6921 浏览 2 评论 0原文

编辑:我添加了赏金,如果有人可以帮助我找出我做错了什么,那就全是你的了。

而且,我真的不在乎这是如何完成的。如果有一个库可以提供帮助,或者类似的东西那就太好了。

由于不涉及验证码,理论上我应该能够登录 Flickr 并通过类似于以下的代码添加联系人...正确的?

当我运行这段代码及其许多变体时,当我到达我应该提交表单以验证我正在添加联系人的地方时,它要求我登录。这是唯一可能是我失败的事情收集正确的cookie?

我有 IEHTTPHeader 供 IE 查看实际发生的情况,并且我正在尽力模拟它。除非我不明白某些事情,否则我找不到哪里出错了。

Flickr API 无法执行此操作

我只想登录并添加预定义联系人。

        //This Kicks off the process
        private void button2_Click(object sender, EventArgs e)
        {
            string user = "adampeditto"; //Some Random Guy
            CookieContainer cookies = new CookieContainer();
            cookies = LoginYahoo(cookies, user);
            cookies = GetCookies(cookies, user);
            cookies = ClickFlickrButton(cookies, user);
        }

        private CookieContainer ClickFlickrButton(CookieContainer cookies, string user)
        {
            try
            {
                string appURL = "http://www.flickr.com/people/" + user + "/relationship";
                string strPostData = "magic_cookie=a9dd9cd9fd23081f35b8bad2c0ba1878&done=1";

                // Setup the http request.
                HttpWebRequest wrWebRequest = WebRequest.Create(appURL) as HttpWebRequest;
                wrWebRequest.Method = "POST";
                wrWebRequest.Timeout = 10000;
                wrWebRequest.ContentLength = strPostData.Length;
                wrWebRequest.ContentType = "application/x-www-form-urlencoded";
                CookieContainer cookieContainer = cookies;
                wrWebRequest.CookieContainer = cookieContainer;

                // Post to the login form.
                StreamWriter swRequestWriter = new
                StreamWriter(wrWebRequest.GetRequestStream());
                swRequestWriter.Write(strPostData);
                swRequestWriter.Close();

                // Get the response.
                HttpWebResponse hwrWebResponse = (HttpWebResponse)wrWebRequest.GetResponse();

                // Read the response
                StreamReader srResponseReader = new StreamReader(hwrWebResponse.GetResponseStream());
                string strResponseData = srResponseReader.ReadToEnd();
                srResponseReader.Close();

                return cookieContainer;
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        private CookieContainer LoginYahoo(CookieContainer cookies, string user)
        {
            string loginName = "YourLoginName";
            string password = "YourPassword";
            string appURL = "https://login.yahoo.com/config/login?.src=flickr&.pc=5134&.scrumb=0&.pd=c%3DE0.GahOp2e4MjkX.5l2HgAoLkpmyPvccpVM-&.intl=us&.done=https%3A%2F%2Flogin.yahoo.com%2Fconfig%2Fvalidate%3F.src%3Dflickr%26.pc%3D5134%26.scrumb%3D0%26.pd%3Dc%253DE0.GahOp2e4MjkX.5l2HgAoLkpmyPvccpVM-%26.intl%3Dus%26.done%3Dhttp%253A%252F%252Fwww.flickr.com%252Fsignin%252Fyahoo%252F%253Fredir%253D%25252Fpeople%25252F" + user + "%25252Frelationship%25252F&rl=1";
            string strPostData = ".tries=1&.src=flickr&.md5=&.hash=&.js=&.last=&promo=&.intl=us&.bypass=&.partner=&.u=0delt5h5l4df0&.v=0&.challenge=3DZF0DFFqdE0m.9MWnCq6LjUZ9gV&.yplus=&.emailCode=&pkg=&stepid=&.ev=&hasMsgr=1&.chkP=Y&.done=https%3A%2F%2Flogin.yahoo.com%2Fconfig%2Fvalidate%3F.src%3Dflickr%26.pc%3D5134%26.scrumb%3D0%26.pd%3Dc%253DE0.GahOp2e4MjkX.5l2HgAoLkpmyPvccpVM-%26.intl%3Dus%26.done%3Dhttp%253A%252F%252Fwww.flickr.com%252Fsignin%252Fyahoo%252F%253Fredir%253D%25252Fpeople%25252F" + user + "%25252Frelationship%25252F&.pd=flickr_ver%3D0%26c%3DE0.GahOp2e4MjkX.5l2HgAoLkpmyPvccpVM-%26ivt%3D%26sg%3D&login=" + loginName + "&passwd=" + password + "&.persistent=y&.save=Sign+In";

            // Setup the http request.
            HttpWebRequest wrWebRequest = WebRequest.Create(appURL) as

            HttpWebRequest;
            wrWebRequest.AllowAutoRedirect = true;
            wrWebRequest.Method = "POST";
            wrWebRequest.ContentLength = strPostData.Length;
            wrWebRequest.ContentType = "application/x-www-form-urlencoded";
            CookieContainer cookieContainer = cookies;
            wrWebRequest.CookieContainer = cookieContainer;

            // Post to the login form.
            StreamWriter swRequestWriter = new
            StreamWriter(wrWebRequest.GetRequestStream());
            swRequestWriter.Write(strPostData);
            swRequestWriter.Close();

            // Get the response.
            HttpWebResponse hwrWebResponse = (HttpWebResponse)wrWebRequest.GetResponse();

            // Read the response
            StreamReader srResponseReader = new
            StreamReader(hwrWebResponse.GetResponseStream());
            string strResponseData = srResponseReader.ReadToEnd();
            srResponseReader.Close();

            //YOU ARE NOW LOGGED IN TO YAHOO!
            ShowInBrowser(strResponseData);
            return cookieContainer;
        }

        //These are the places it sends you upon autoredirect after your run LoginYahoo(), if you set AutoRedirect to true there should be no need for this...
        private CookieContainer GetCookies(CookieContainer cookies, string user)
        {
            CookieContainer cookieContainer = cookies;

            string appURL = "http://login.yahoo.com/config/validate?.src=flickr&.pc=5134&.scrumb=6l14Ni2Pz3j&.pd=c%3DE0.GahOp2e4MjkX.5l2HgAoLkpmyPvccpVM-&.intl=us&.done=http%3A%2F%2Fwww.flickr.com%2Fsignin%2Fyahoo%2F%3Fredir%3D%252Fpeople%252F" + user + "%252Frelationship%252F";
            HttpWebRequest wrWebRequest = WebRequest.Create(appURL) as HttpWebRequest;
            wrWebRequest.CookieContainer = cookieContainer;
            wrWebRequest.AllowAutoRedirect = false;
            HttpWebResponse hwrWebResponse = (HttpWebResponse)wrWebRequest.GetResponse();

            appURL = "http://flickr.com/signin/yahoo/?redir=%2Fpeople%2F" + user + "%2Frelationship%";
            HttpWebRequest wrWebRequest2 = WebRequest.Create(appURL) as HttpWebRequest;
            wrWebRequest2.CookieContainer = cookieContainer;
            wrWebRequest2.AllowAutoRedirect = false;
            HttpWebResponse hwrWebResponse2 = (HttpWebResponse)wrWebRequest2.GetResponse();

            appURL = "http://flickr.com/cookie_check.gne?pass=%2Fpeople%2F" + user + "%2Frelationship%2F&fail=register_cookies.gne";
            HttpWebRequest wrWebRequest3 = WebRequest.Create(appURL) as HttpWebRequest;
            wrWebRequest3.CookieContainer = cookieContainer;
            wrWebRequest3.AllowAutoRedirect = true;
            HttpWebResponse hwrWebResponse3 = (HttpWebResponse)wrWebRequest3.GetResponse();

            return cookieContainer;
        }

EDIT: I added a bounty, if someone could help me figure out what I am doing wrong, its all yours.

Also, I don't really care how this gets done. If there is a library that can help out, or something of that sort that would be great.

Since there is no Captcha involved, I should theoretically be able to log into Flickr and add a contact through code similar to the following...correct?

When I run this code and many many variants of it when I get to the place where I am supposed to submit a form to verify that I am adding a contact, it asks me to log in. Is the only thing this could be my failure to collect the right cookie?

I have IEHTTPHeader for IE to look at whats actually happening and I am trying my best to emulate it. I just can't find where I am going wrong unless I just don't understand something.

Flickr API can't do this

All I want to do is login and add a predefined contact.

        //This Kicks off the process
        private void button2_Click(object sender, EventArgs e)
        {
            string user = "adampeditto"; //Some Random Guy
            CookieContainer cookies = new CookieContainer();
            cookies = LoginYahoo(cookies, user);
            cookies = GetCookies(cookies, user);
            cookies = ClickFlickrButton(cookies, user);
        }

        private CookieContainer ClickFlickrButton(CookieContainer cookies, string user)
        {
            try
            {
                string appURL = "http://www.flickr.com/people/" + user + "/relationship";
                string strPostData = "magic_cookie=a9dd9cd9fd23081f35b8bad2c0ba1878&done=1";

                // Setup the http request.
                HttpWebRequest wrWebRequest = WebRequest.Create(appURL) as HttpWebRequest;
                wrWebRequest.Method = "POST";
                wrWebRequest.Timeout = 10000;
                wrWebRequest.ContentLength = strPostData.Length;
                wrWebRequest.ContentType = "application/x-www-form-urlencoded";
                CookieContainer cookieContainer = cookies;
                wrWebRequest.CookieContainer = cookieContainer;

                // Post to the login form.
                StreamWriter swRequestWriter = new
                StreamWriter(wrWebRequest.GetRequestStream());
                swRequestWriter.Write(strPostData);
                swRequestWriter.Close();

                // Get the response.
                HttpWebResponse hwrWebResponse = (HttpWebResponse)wrWebRequest.GetResponse();

                // Read the response
                StreamReader srResponseReader = new StreamReader(hwrWebResponse.GetResponseStream());
                string strResponseData = srResponseReader.ReadToEnd();
                srResponseReader.Close();

                return cookieContainer;
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        private CookieContainer LoginYahoo(CookieContainer cookies, string user)
        {
            string loginName = "YourLoginName";
            string password = "YourPassword";
            string appURL = "https://login.yahoo.com/config/login?.src=flickr&.pc=5134&.scrumb=0&.pd=c%3DE0.GahOp2e4MjkX.5l2HgAoLkpmyPvccpVM-&.intl=us&.done=https%3A%2F%2Flogin.yahoo.com%2Fconfig%2Fvalidate%3F.src%3Dflickr%26.pc%3D5134%26.scrumb%3D0%26.pd%3Dc%253DE0.GahOp2e4MjkX.5l2HgAoLkpmyPvccpVM-%26.intl%3Dus%26.done%3Dhttp%253A%252F%252Fwww.flickr.com%252Fsignin%252Fyahoo%252F%253Fredir%253D%25252Fpeople%25252F" + user + "%25252Frelationship%25252F&rl=1";
            string strPostData = ".tries=1&.src=flickr&.md5=&.hash=&.js=&.last=&promo=&.intl=us&.bypass=&.partner=&.u=0delt5h5l4df0&.v=0&.challenge=3DZF0DFFqdE0m.9MWnCq6LjUZ9gV&.yplus=&.emailCode=&pkg=&stepid=&.ev=&hasMsgr=1&.chkP=Y&.done=https%3A%2F%2Flogin.yahoo.com%2Fconfig%2Fvalidate%3F.src%3Dflickr%26.pc%3D5134%26.scrumb%3D0%26.pd%3Dc%253DE0.GahOp2e4MjkX.5l2HgAoLkpmyPvccpVM-%26.intl%3Dus%26.done%3Dhttp%253A%252F%252Fwww.flickr.com%252Fsignin%252Fyahoo%252F%253Fredir%253D%25252Fpeople%25252F" + user + "%25252Frelationship%25252F&.pd=flickr_ver%3D0%26c%3DE0.GahOp2e4MjkX.5l2HgAoLkpmyPvccpVM-%26ivt%3D%26sg%3D&login=" + loginName + "&passwd=" + password + "&.persistent=y&.save=Sign+In";

            // Setup the http request.
            HttpWebRequest wrWebRequest = WebRequest.Create(appURL) as

            HttpWebRequest;
            wrWebRequest.AllowAutoRedirect = true;
            wrWebRequest.Method = "POST";
            wrWebRequest.ContentLength = strPostData.Length;
            wrWebRequest.ContentType = "application/x-www-form-urlencoded";
            CookieContainer cookieContainer = cookies;
            wrWebRequest.CookieContainer = cookieContainer;

            // Post to the login form.
            StreamWriter swRequestWriter = new
            StreamWriter(wrWebRequest.GetRequestStream());
            swRequestWriter.Write(strPostData);
            swRequestWriter.Close();

            // Get the response.
            HttpWebResponse hwrWebResponse = (HttpWebResponse)wrWebRequest.GetResponse();

            // Read the response
            StreamReader srResponseReader = new
            StreamReader(hwrWebResponse.GetResponseStream());
            string strResponseData = srResponseReader.ReadToEnd();
            srResponseReader.Close();

            //YOU ARE NOW LOGGED IN TO YAHOO!
            ShowInBrowser(strResponseData);
            return cookieContainer;
        }

        //These are the places it sends you upon autoredirect after your run LoginYahoo(), if you set AutoRedirect to true there should be no need for this...
        private CookieContainer GetCookies(CookieContainer cookies, string user)
        {
            CookieContainer cookieContainer = cookies;

            string appURL = "http://login.yahoo.com/config/validate?.src=flickr&.pc=5134&.scrumb=6l14Ni2Pz3j&.pd=c%3DE0.GahOp2e4MjkX.5l2HgAoLkpmyPvccpVM-&.intl=us&.done=http%3A%2F%2Fwww.flickr.com%2Fsignin%2Fyahoo%2F%3Fredir%3D%252Fpeople%252F" + user + "%252Frelationship%252F";
            HttpWebRequest wrWebRequest = WebRequest.Create(appURL) as HttpWebRequest;
            wrWebRequest.CookieContainer = cookieContainer;
            wrWebRequest.AllowAutoRedirect = false;
            HttpWebResponse hwrWebResponse = (HttpWebResponse)wrWebRequest.GetResponse();

            appURL = "http://flickr.com/signin/yahoo/?redir=%2Fpeople%2F" + user + "%2Frelationship%";
            HttpWebRequest wrWebRequest2 = WebRequest.Create(appURL) as HttpWebRequest;
            wrWebRequest2.CookieContainer = cookieContainer;
            wrWebRequest2.AllowAutoRedirect = false;
            HttpWebResponse hwrWebResponse2 = (HttpWebResponse)wrWebRequest2.GetResponse();

            appURL = "http://flickr.com/cookie_check.gne?pass=%2Fpeople%2F" + user + "%2Frelationship%2F&fail=register_cookies.gne";
            HttpWebRequest wrWebRequest3 = WebRequest.Create(appURL) as HttpWebRequest;
            wrWebRequest3.CookieContainer = cookieContainer;
            wrWebRequest3.AllowAutoRedirect = true;
            HttpWebResponse hwrWebResponse3 = (HttpWebResponse)wrWebRequest3.GetResponse();

            return cookieContainer;
        }

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

淡忘如思 2024-08-25 03:14:29

我已经对 perl 的 WWW:Mechanize 库做了类似的事情,请研究一下。

I've done something similar with perl's WWW:Mechanize library, look into that.

执着的年纪 2024-08-25 03:14:29

您可以使用 Flickr API,而不是进行屏幕抓取并让程序员的生活变得艰难。 。您可能还会发现这篇博文很有帮助。

Instead of doing screen scraping and making your life of programmer hard, you could use the Flickr API. You might also find this blog post helpful.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文