Everything you need to have a summary of unread item in your Google Reader account…!
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net;
using System.IO;
using System.Xml;
namespace Chapleau.GoogleReader
{
public class GoogleReader
{
private string _sid = null;
private string _token = null;
private string _auth = null;
private Cookie _cookie = null;
private string _username;
private string _password;
public GoogleReader(string username, string password)
{
_username = username;
_password = password;
connect();
}
private bool connect()
{
getToken();
return _token != null;
}
private void getToken()
{
getSid();
_cookie = new Cookie("SID", _sid, "/", ".google.com");
string url = "http://www.google.com/reader/api/0/token";
HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);
req.Method = "GET";
req.CookieContainer = new CookieContainer();
req.CookieContainer.Add(_cookie);
req.Headers.Add("Authorization", "GoogleLogin auth=" + _auth);
HttpWebResponse response = (HttpWebResponse)req.GetResponse();
using (var stream = response.GetResponseStream())
{
StreamReader r = new StreamReader(stream);
_token = r.ReadToEnd();
}
}
private void getSid()
{
string requestUrl = string.Format
("https://www.google.com/accounts/ClientLogin?service=reader&Email={0}&Passwd={1}",
_username, _password);
HttpWebRequest req = (HttpWebRequest)WebRequest.Create(requestUrl);
req.Method = "GET";
HttpWebResponse response = (HttpWebResponse)req.GetResponse();
using (var stream = response.GetResponseStream())
{
StreamReader r = new StreamReader(stream);
string resp = r.ReadToEnd();
foreach (string cLine in resp.Split('\n'))
{
if (cLine.StartsWith("SID=")) { _sid = cLine.Replace("SID=", ""); }
//if (cLine.StartsWith("LSID=")) { cLSID = cLine.Replace("LSID=", ""); }
if (cLine.StartsWith("Auth=")) { _auth = cLine.Replace("Auth=", ""); }
}
}
}
private HttpWebResponse httpGet(string requestUrl, string getArgs)
{
string url = string.Format("{0}?{1}", requestUrl, getArgs);
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
request.Method = "GET";
request.CookieContainer = new CookieContainer();
request.CookieContainer.Add(_cookie);
request.Headers.Add("Authorization", "GoogleLogin auth=" + _auth);
try
{
return (HttpWebResponse)request.GetResponse();
}
catch
{
// handle error
return null;
}
}
private HttpWebResponse httpPost(string requestUrl, string postArgs)
{
byte[] buffer = Encoding.GetEncoding(1252).GetBytes(postArgs);
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(requestUrl);
request.Method = "POST";
request.CookieContainer = new CookieContainer();
request.CookieContainer.Add(_cookie);
request.ContentType = "application/x-www-form-urlencoded";
request.ContentLength = buffer.Length;
Stream PostData = request.GetRequestStream();
PostData.Write(buffer, 0, buffer.Length);
PostData.Close();
try
{
return (HttpWebResponse)request.GetResponse();
}
catch
{
//handle error
return null;
}
}
public int GetUnreadCount(out string details, out int numberOfFeed)
{
StreamReader r = new StreamReader(httpGet("http://www.google.com/reader/api/0/unread-count", "all=true&output=xml").GetResponseStream());
string c = r.ReadToEnd();
r.Close();
XmlDocument d = new XmlDocument();
d.LoadXml(c);
details = string.Empty;
int count = d.DocumentElement.SelectNodes("/object/list/object").Count;
if(count > 0)
count = count - 1;
numberOfFeed = count;
foreach(XmlElement e in d.DocumentElement.SelectNodes("/object/list/object"))
{
XmlElement nameNode = (XmlElement)e.SelectSingleNode("string[@name='id']");
if (nameNode.InnerText.Contains("reading-list"))
{
return int.Parse(e.SelectSingleNode("number[@name='count']").InnerText);
}
else
{
details += e.SelectSingleNode("number[@name='count']").InnerText + " @ " + e.SelectSingleNode("string[@name='id']").InnerText + Environment.NewLine;
}
}
return 0;
}
}
}