using System; using System.Collections.Generic; using System.Net.Http; using SteamKit2; // // Sample 6: WebAPI // // this sample will give an example of how the WebAPI utilities can be used to // interact with the Steam Web APIs // // the Steam Web APIs are structured as a set of "interfaces" with methods, // similar to classes in OO languages. // as such, the API for interacting with the WebAPI follows a similar methodology // in order to interact with the Web APIs, you must first acquire an interface // for a certain API using ( dynamic steamNews = WebAPI.GetInterface( "ISteamNews" ) ) { // note the usage of c#'s dynamic feature, which can be used // to make the api a breeze to use // the ISteamNews WebAPI has only 1 function: GetNewsForApp, // so we'll be using that // when making use of dynamic, we call the interface function directly // and pass any parameters as named arguments KeyValue kvNews = steamNews.GetNewsForApp( appid: 440 ); // get news for tf2 // the return of every WebAPI call is a KeyValue class that contains the result data // for this example we'll iterate the results and display the title foreach ( KeyValue news in kvNews[ "newsitems" ][ "newsitem" ].Children ) { Console.WriteLine( "News: {0}", news[ "title" ].AsString() ); } // for functions with multiple versions, the version can be specified by // adding a number after the function name when calling the API kvNews = steamNews.GetNewsForApp2( appid: 570 ); // if a number is not specified, version 1 is assumed by default // notice that the output of this version differs from the first version foreach ( KeyValue news in kvNews[ "newsitems" ].Children ) { Console.WriteLine( "News: {0}", news[ "title" ].AsString() ); } // note that the interface functions can throw WebExceptions when the API // is otherwise inaccessible (networking issues, server downtime, etc) // and these should be handled appropriately try { kvNews = steamNews.GetNewsForApp002( appid: 730, maxlength: 100, count: 5 ); } catch ( Exception ex ) { Console.WriteLine( "Unable to make GetNewsForApp API request: {0}", ex.Message ); } } // for WebAPIs that require an API key, the key can be specified in the GetInterface function using ( dynamic steamUserAuth = WebAPI.GetInterface( "ISteamUserAuth", "APIKEYGOESHERE" ) ) { // as the interface functions are synchronous, it may be beneficial to specify a timeout for calls steamUserAuth.Timeout = TimeSpan.FromSeconds( 5 ); // additionally, if the API you are using requires you to POST, // you may specify with the "method" reserved parameter try { steamUserAuth.AuthenticateUser( someParam: "someValue", method: HttpMethod.Post ); } catch ( Exception ex ) { Console.WriteLine( "Unable to make AuthenticateUser API Request: {0}", ex.Message ); } } // if you are using a language that does not have dynamic object support, or you otherwise don't wish to use it // you can call interface functions through a Call method using ( WebAPI.Interface steamNews = WebAPI.GetInterface( "ISteamNews" ) ) { var newsArgs = new Dictionary { [ "appid" ] = "440" }; KeyValue results = steamNews.Call( "GetNewsForApp", /* version */ 1, newsArgs ); foreach ( KeyValue news in results[ "newsitems" ][ "newsitem" ].Children ) { Console.WriteLine( "News: {0}", news[ "title" ].AsString() ); } }