abbr works only on full words; changes on nodes don't work
[osm-helpers.git] / WebMessage.cs
blob2415daf1fade3abab0abcba24f3b637fac3a5c47
1 using System;
2 using System.Net;
3 using System.IO;
4 using System.Web;
6 namespace OpenStreetMap {
8 public class WebMessage {
9 CookieContainer cookies;
10 Exception error;
13 static void PrintStream (Stream s)
15 StreamReader tr = new StreamReader (s);
16 string line;
17 while ((line = tr.ReadLine ()) != null) {
18 Console.WriteLine (line);
23 public Exception Error {
24 get {return error;}
27 public void Login (string username, string password)
29 cookies = new CookieContainer ();
30 /* perform the actual login */
31 HttpWebRequest req = WebRequest.Create ("http://www.openstreetmap.org/login") as HttpWebRequest;
32 req.CookieContainer = cookies;
33 req.ServicePoint.Expect100Continue = false;
34 req.Method = "POST";
35 req.Timeout = 5000;
36 req.ContentType = "application/x-www-form-urlencoded";
37 req.Referer = "http://www.openstreetmap.org/login";
38 req.AllowAutoRedirect = false;
39 string data = HttpUtility.UrlEncode ("user[email]") + "=" + HttpUtility.UrlEncode (username) + "&"
40 + HttpUtility.UrlEncode ("user[password]") + "=" + HttpUtility.UrlEncode (password) + "&"
41 + HttpUtility.UrlEncode ("commit") + "=" + HttpUtility.UrlEncode ("Login") + "&"
42 + HttpUtility.UrlEncode ("referer") + "=" + HttpUtility.UrlEncode ("/login");
43 StreamWriter logdata = new StreamWriter (req.GetRequestStream());
44 logdata.Write (data);
45 logdata.Close ();
46 HttpWebResponse res = req.GetResponse () as HttpWebResponse;
47 Stream s = res.GetResponseStream ();
48 //PrintStream (s);
49 s.Close ();
52 int GetUserID (string user)
54 int id = -1;
55 HttpWebRequest req = WebRequest.Create (new Uri ("http://www.openstreetmap.org/user/" + user)) as HttpWebRequest;
56 req.ServicePoint.Expect100Continue = false;
57 // cookies are not needed and this allows getting the id also for the current user
58 //req.CookieContainer = cookies;
59 req.Timeout = 5000;
60 HttpWebResponse res = req.GetResponse () as HttpWebResponse;
61 Stream s = res.GetResponseStream ();
62 StreamReader tr = new StreamReader (s);
63 string line;
64 while ((line = tr.ReadLine ()) != null) {
65 if (line.IndexOf ("Description") >= 0)
66 break;
67 int pos = line.IndexOf ("message/new/");
68 if (pos >= 0) {
69 int quotes = line.IndexOf ('"', pos);
70 pos += 12;
71 string sid = line.Substring (pos, quotes - pos);
72 //Console.WriteLine ("User {0} has id: '{1}'", user, sid);
73 id = int.Parse (sid);
74 break;
77 s.Close ();
78 return id;
81 public bool Send (string user, string subject, string message)
83 int id = GetUserID (user);
84 return Send (id, subject, message);
87 public bool Send (int user, string subject, string message)
89 HttpWebRequest req = WebRequest.Create ("http://www.openstreetmap.org/message/new/" + user) as HttpWebRequest;
90 req.CookieContainer = cookies;
91 req.ServicePoint.Expect100Continue = false;
92 req.Method = "POST";
93 req.Timeout = 5000;
94 req.ContentType = "application/x-www-form-urlencoded";
95 req.Referer = "http://www.openstreetmap.org/";
96 req.AllowAutoRedirect = false;
97 string data = HttpUtility.UrlEncode ("message[title]") + "=" + HttpUtility.UrlEncode (subject) + "&"
98 + HttpUtility.UrlEncode ("message[body]") + "=" + HttpUtility.UrlEncode (message) + "&"
99 + HttpUtility.UrlEncode ("commit") + "=" + HttpUtility.UrlEncode ("Send");
100 StreamWriter logdata = new StreamWriter (req.GetRequestStream());
101 logdata.Write (data);
102 logdata.Close ();
103 HttpWebResponse res = req.GetResponse () as HttpWebResponse;
104 Stream s = res.GetResponseStream ();
105 //PrintStream (s);
106 s.Close ();
107 return true;