天天看点

开心农场助手——开发总结

一、原因

二、实现的初步成果

        开发时间进行了一天,初步成果介绍:用户登录、自己菜地的植物成熟列表及其名称,有成熟植物的好友列表。

三、程序开发重点

       1. 语言采用c#,该语言开发周期短

       2. 需要了解或者利用其他手段来获知菜地的各种属性值,利用该值作为信息显示和判断的依据。

       3. 模拟http的POST、GET方法,以及cookie的使用和获得。因为这个关系到网站模拟登录以及登录后的操作。

       4. Unicode编码文字转换为正常显示

       5. 登录过程中,验证码的获得和提交

       6. XML解析,难点是指定子节点,获得该子节点的值。

       7. 正则表达式,使用正则来获得需要的信息,避免使用indexof来搜索。

四、模块介绍

       1. 登录

            1)使用HttpWebRequest来实现模拟POST登录,并获得cookie

                  res = (HttpWebResponse) req.GetResponse();

                  strKaixinCookie = req.CookieContainer.GetCookieHeader(new Uri(url));            2)使用cookie

                  CookieContainer cookieCon = new CookieContainer();

                  httpWebRequest.CookieContainer = cookieCon;                  string [] Cookies=strKaixinCookie.Split(";".ToCharArray());

                  foreach(string cookie in Cookies)

                 {

                     httpWebRequest.CookieContainer.SetCookies(new Uri(url), cookie);

                 }       2. 登录验证码

           因为一直在测试程序,导致每次登陆都会提示我输入图片形式的验证码。这里没有采用文字识别,而是提示给用户,让用户自己输入。

          获得验证码图片,一定要注意否则输入的验证码信息提交上去后无效。

         带验证码提交的串

          invisible_mode=0&rcode=与验证码相一致的随机串(必须一样否则不能验证失败)&url=//&email=password=&code=验证码

      3. 一些URL

      登录者的菜地信息

     成熟的好友列表

    好友菜地

    4. 正则表达式

         regex = new Regex("realname/":/"(.+?)/"",RegexOptions.Singleline);

         iEnumerator = regex.Matches(strResult).GetEnumerator();         try

         {

                while (iEnumerator.MoveNext())

               {

                       str+= NormalU2C(((Match)iEnumerator.Current).Groups[1].Value.ToString()) + "/r/n"; 

               }

         }

         finally

        {

               IDisposable iDisposable = iEnumerator as IDisposable;

               if (iDisposable != null)

                      iDisposable.Dispose();

        }     5. XML操作

         nodeList = doc.SelectNodes("/conf/garden/item");

         foreach (XmlNode node in nodeList)

              XmlNode subNode=node.SelectSingleNode("name");

              if (subNode!=null)

             {

                       string strName= subNode.InnerText;

                       string strProduct=node.SelectSingleNode("crops").InnerText;

                       str+=strName + " /r/n";

              }

        }五、暂告一段落