同步消息到网易微博和滴

8 条评论

光见网易在喊着开放啊开放啊什么的,其实是在糊弄人吧。网易微博没有API,只能网页发布更新消息,好在这一类的人倒是不少,他不是第一个,也不会是最后一个。网易微博和滴我在 里将他们放在了一起,都是一个登录发布两步就完成的过程。

»阅读全文

同步消息到Facebook

0 条评论

要离开 Facebook 就不需要想那么多的理由了,本来就没有认真使用过此服务的。对于国内的大部分用户来说,其对于人人网优势也不大,没什么吸引力,什么隐私保护啊方面的都是扯淡,保护自己隐私是自己的事情,不要全怪别人的服务。

做Facebook的同步之前,在网上搜索过一下,看起来还没有类似的文章出现,这样这篇文章好歹还能稍微有点价值了。

由于当时使用的是代理来访问Facebook,数据又是经过 base64 加密过的,所以抓包看的时候也是相当纠结,没法一眼看出来要找的东西,一个个都得解密再看下,相当麻烦。这次废话多点说下程序的实现过程。

1、首先是到登录地址 https://login.facebook.com/login.php?login_attempt=1 嘛,存储好 cookies 并且从页面解析出一个 lsd 的参数,然后再次向此地址提交登录参数,包括 charset_test=%E2%82%AC%2C%C2%B4%2C%E2%82%AC%2C%C2%B4%2C%E6%B0%B4%2C%D0%94%2C%D0%84、return_session=0、legacy_return=1、display=、session_key_only=0、trynum=1、emailpass、persistent=1、login=%E7%99%BB%E5%BD%95、lsd

2、在登录成功之后保存 cookies 转向 http://www.facebook.com/home.php ,然后从此页面解析出 profile_id、 composer_id、post_form_id 、fb_dtsg 4个参数出来。

3、最后一步向 http://www.facebook.com/ajax/updatestatus.php?__a=1 提交状态信息,需要包括以下参数 action=HOME_UPDATE、home_tab_id=1、profile_idstatus、target_id=0、app_id、privacy_data[value]=80、privacy_data[friends]=0、privacy_data[list_anon]=0、privacy_data[list_x_anon]=0、composer_id、composer_id 、hey_kid_im_a_composer=true、display_context=home、post_form_idfb_dtsglsd、_log_display_context=home、ajax_log=1、post_form_id_source=AsyncRequest 。

»阅读全文

同步消息到凤凰微博和鲜果联播

3 条评论

从这些个微博、SNS 中脱身出来是我最近花很多时间在做的。有提到过,我将某个服务自己的帐户清理干净了,或者想办法注销掉了帐户或者冷处理掉后便会整理一下相关服务的同步代码发篇文章。像凤凰微博和鲜果微博这种对我来说不过是纯粹拿来凑同步服务的数的服务留到现在才提起,实在是只能怪我太懒。

这些没有公开API的没什么好说的,只能选择模拟网页登录来更新消息。先是凤凰微博的,不需要解释了

»阅读全文

iTunes出现“文件夹itunes位于锁定磁盘上”了。(外一则)

4 条评论

那天打开iTunes突然出现“文件夹itunes位于锁定磁盘上,或您没有此文件夹的写权限”,没法启动了。。

于是上网搜各种解决方案,然而只要到了选定原来的资料库这一步,就一切如故。

最后Chkdsk检查资料库所在磁盘,无错,但iTunes可用了。。。泪目。。

今天用wlm的时候提示403 Forbidden,但文章发出去了。

同样网上找了半天找不到解决方案。

最后发现因为这个傻逼软件会自动把粘贴的网络图片往Blogger服务器传。。自然Forbidden了。。。

所以出错提示是很重要的信息。。。

最后祝博主in love for ever~

好吧此文纯属凑数的。。

同步消息到嘀咕、人间、饭否等

8 条评论

现在,越来越像是在做一个交代了。同类型的服务包括但不限于嘀咕网、Follow5、人间网、饭否、叽歪、做啥、雷猴、9911、新浪微博、搜狐白社会。共同特征即有公开的API,且主要使用 HTTP BASIC AUTH。

实际上使用这种类型的 API,也就是完成怎么 HTTP BASIC AUTH 就好了,在 中我采取的是将用户名密码放到 header 里。

  1. /// <summary>
  2. /// 给提供常用API,只需要 HTTP BASIC AUTH 的服务发送消息
  3. /// </summary>
  4. /// <param name="user">用户名</param>
  5. /// <param name="password">密码</param>
  6. /// <param name="param1">发送数据的第一个参数key</param>
  7. /// <param name="value1">发送数据的第一个参数value</param>
  8. /// <param name="param2">发送数据的第二个参数key</param>
  9. /// <param name="value2">发送数据的第二个参数value</param>
  10. /// <param name="apiurl">API请求地址</param>
  11. /// <param name="service">服务名称</param>
  12. private void update_api(string user, string password, string param1, string value1, string param2, string value2, string apiurl, string service)
  13. {
  14.     this.BeginInvoke(new UpdateStatusDelegate(StateInfo), new object[] { "正在将消息发布到 " + service });
  15.     string postData = Utility.UrlEncode(param1) + "=" + Utility.UrlEncode(value1);
  16.     if (!string.IsNullOrEmpty(param2))
  17.     {
  18.         postData += "&" + Utility.UrlEncode(param2) + "=" + Utility.UrlEncode(value2);
  19.     }
  20.     byte[] bs = Encoding.UTF8.GetBytes(postData);
  21.     HttpWebRequest request= (HttpWebRequest)HttpWebRequest.Create(apiurl);
  22.     request.ContentType = "application/x-www-form-urlencoded";
  23.     request.Method = "POST";
  24.     request.Headers.Add("Authorization", "Basic " + Convert.ToBase64String(new UTF8Encoding().GetBytes(user + ":" + password)));
  25.     request.ContentLength = bs.Length;
  26.     try
  27.     {
  28.         using (Stream requestStream = request.GetRequestStream())
  29.         {
  30.             requestStream.Write(bs, 0, bs.Length);
  31.             requestStream.Close();
  32.         }
  33.     }
  34.     catch (Exception e)
  35.     {
  36.         ErrorMessage("将消息发布到 " + service + " 时出现意外,建议暂时取消这一服务的同步:\r\n" + e.Message, -1);
  37.         return;
  38.     }
  39. }

哈,这个函数写的真是烂,通用性也一点都不好,传过来整个的 postBody 然后根据 “&” 再处理啊,UrlEncode 就好,这样使用更方便一些,如果要扩展功能也是必须的。很烂的代码看着就烦,不过现在太懒,不改先,将就下…