[b]"Chez ceux qui semblent très vertueux se cachent en général la vanité, l'orgueil, l'intolérance".
P.Coehlo (Maktub 2004)/b
/* * Created by SharpDevelop. * User: Eric * Date: 02/11/2013 * Time: 13:43 * * To change this template use Tools | Options | Coding | Edit Standard Headers. */ using System; using System.Net; using System.Text; using System.IO; using System.Text.RegularExpressions; using System.Security.Cryptography; using System.Collections.Generic; using System.Linq; namespace testfree { class Program { public static void Main(string[] args) { Console.WriteLine("Hello World!"); Tuple<string,string> apptokenrequest = AppTokenRequest(); Tuple<string,string> apptokenstatus = AppTokenStatus(apptokenrequest.Item2); Console.WriteLine(apptokenstatus.Item1); Console.Write("Activer l'app . . . "); apptokenstatus = AppTokenStatus(apptokenrequest.Item2); Console.WriteLine(apptokenstatus.Item1); Tuple<string,string> sessionRequest = SessionRequest("fr.freebox.testapp",apptokenrequest.Item1, apptokenstatus.Item2); if (sessionRequest.Item1 == "success") { Console.WriteLine(sessionRequest.Item1); string Output = ApiCall("http://mafreebox.freebox.fr/api/v1/lan/freeplug/",sessionRequest.Item2); } else { } Console.ReadKey(true); } private static Tuple<string,string> AppTokenRequest() { var httpWebRequest = (HttpWebRequest)WebRequest.Create("http://mafreebox.freebox.fr/api/v1/login/authorize/"); httpWebRequest.ContentType = "text/json"; httpWebRequest.Method = "POST"; using (var streamWriter = new StreamWriter(httpWebRequest.GetRequestStream())) { string json = "{\"app_id\":\"fr.freebox.testapp\"," + "\"app_name\":\"Test app\"," + "\"app_version\":\"1.0\"," + "\"device_name\":\"LaptopA\"}"; streamWriter.Write(json); streamWriter.Flush(); streamWriter.Close(); var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse(); using (var streamReader = new StreamReader(httpResponse.GetResponseStream())) { var result = streamReader.ReadToEnd(); Regex token = new Regex("app_token\":\"(.[^\"]*)"); Regex trackid = new Regex("track_id\":(\\d*)"); return new Tuple<string,string>(token.Match(result).Groups[1].Value.ToString(), trackid.Match(result).Groups[1].Value.ToString()); } } } private static Tuple<string,string> AppTokenStatus(string trackid) { var httpWebRequest = (HttpWebRequest)WebRequest.Create("http://mafreebox.freebox.fr/api/v1/login/authorize/" + trackid); httpWebRequest.Method = "GET"; var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse(); using (var streamReader = new StreamReader(httpResponse.GetResponseStream())) { var result = streamReader.ReadToEnd(); Regex status = new Regex("\"status\":\"(.[^\"]*)"); Regex challenge = new Regex("challenge\":\"(.[^\"]*)"); return new Tuple<string,string>(status.Match(result).Groups[1].Value.ToString(),challenge.Match(result).Groups[1].Value.ToString()); } } private static string ChallengeRequest() { var httpWebRequest = (HttpWebRequest)WebRequest.Create("http://mafreebox.freebox.fr/api/v1/login/"); httpWebRequest.Method = "GET"; var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse(); using (var streamReader = new StreamReader(httpResponse.GetResponseStream())) { var result = streamReader.ReadToEnd(); Regex challenge = new Regex("challenge\":\"(.[^\"]*)"); return challenge.Match(result).Groups[1].Value.ToString(); } } private static Tuple<string,string> SessionRequest(string appid, string apptoken, string challenge) { string password = Encode(challenge,Encoding.ASCII.GetBytes(apptoken)); string password1 = Encode(apptoken,Encoding.ASCII.GetBytes(challenge)); var httpWebRequest = (HttpWebRequest)WebRequest.Create("http://mafreebox.freebox.fr/api/v1/login/session/"); httpWebRequest.ContentType = "text/json"; httpWebRequest.Method = "POST"; using (var streamWriter = new StreamWriter(httpWebRequest.GetRequestStream())) { string json = "{\"app_id\":\"" + appid + "\",\"password\":\"" + password + "\"}"; streamWriter.Write(json); streamWriter.Flush(); streamWriter.Close(); var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse(); using (var streamReader = new StreamReader(httpResponse.GetResponseStream())) { var result = streamReader.ReadToEnd(); Regex session = new Regex("session_token\" : \"(.[^\"]*)"); Regex success = new Regex("success\": " + @"(\w[^,]*)"); return new Tuple<string,string>(success.Match(result).Groups[1].Value.ToString(), session.Match(result).Groups[1].Value.ToString()); } } } private static string ApiCall(string url, string sessionid) { //X-Fbx-App-Auth: HttpWebRequest httpWebRequest = (HttpWebRequest)WebRequest.Create(url); httpWebRequest.Method = "GET"; httpWebRequest.Headers.Add("X-Fbx-App-Auth", sessionid); HttpWebResponse httpResponse = (HttpWebResponse)httpWebRequest.GetResponse(); using (var streamReader = new StreamReader(httpResponse.GetResponseStream())) { return streamReader.ReadToEnd(); } } public static string Encode(string input, byte[] key) { HMACSHA1 myhmacsha1 = new HMACSHA1(key); byte[] byteArray = Encoding.ASCII.GetBytes(input); MemoryStream stream = new MemoryStream(byteArray); return myhmacsha1.ComputeHash(stream).Aggregate("", (s, e) => s + String.Format("{0:x2}",e), s => s ); } } }
5 août 2013 à 09:37
Je sais que ça fait un moment que tu posté ça mais j'aimerais savoir comment tu as fais finalement parce aujourd'hui j'aimerais bien moi aussi récupérer ces infos..
Merci d'avance :D
6 août 2013 à 08:24
Alors les choses ont pas mal changé depuis 2011 puisque tout récemment les nouvelles API venant avec le firmware 2.0 sont sorties. Pour le moment je suis en train de lire la documentation qui elle aussi est disponible. Dès que j'ai un peu de temps, je posterais une source qui montrera comment au moins s'identifier pour ensuite utiliser les API.
@++
SD