2014-10-29 31 views
6

有没有人有从.net/C#调用Marketo Rest API的示例。在.net/c中调用Marketo Rest Api的示例代码#

我对oauth验证片特别感兴趣。 http://developers.marketo.com/documentation/rest/authentication/

我打算把这个端点 http://developers.marketo.com/documentation/rest/get-multiple-leads-by-list-id/

我找不到任何例子在那里的interweb。

+0

确实没有关于使用.net/C#调用Market REST API的示例或文档。不知道为什么有人不喜欢这个问题。 – Cameron 2014-10-30 02:51:22

+0

为什么这是低调?这是一个有效的问题。 – 2014-10-30 16:46:17

回答

6

我能够编写一个调用Marketo Rest API并执行OAuth的解决方案。下面是一个操作方法 下面的代码显示了基础知识,但需要清理,记录和错误处理才能使产品更有价值。

您需要获取Marketo实例的Rest api URL。为此,请登录到marketo,然后导航到Admin \ Integration \ Web Services,并使用Rest API部分中的URL。

您需要从marketo获取用户ID和密码 - 导航到Admin \ Integration \ Launch Pont。查看您的休息服务的详细信息以获得身份证和秘密。如果您没有服务,请按照这些说明http://developers.marketo.com/documentation/rest/custom-service/

最后,您需要列出您想要获得的潜在客户名单的列表ID。您可以通过导航到您的列表并将id的数字部分从url中复制出来。例如:https://XXXXX.marketo.com/#ST1194B2 - >列表ID = 1194

 private void GetListLeads() 
    { 
     string token = GetToken().Result; 

     string listID = "XXXX"; // Get from Marketo UI 
     LeadListResponse leadListResponse = GetListItems(token, listID).Result; 
     //TODO: do something with your list of leads 

    } 
    private async Task<string> GetToken() 
    { 
     string clientID = "XXXXXX"; // Get from Marketo UI 
     string clientSecret = "XXXXXX"; // Get from Marketo UI 

     string url = String.Format("https://XXXXXX.mktorest.com/identity/oauth/token?grant_type=client_credentials&client_id={0}&client_secret={1}",clientID, clientSecret); // Get from Marketo UI 
     var fullUri = new Uri(url, UriKind.Absolute); 

     TokenResponse tokenResponse = new TokenResponse(); 
     using (var client = new HttpClient()) 
     { 
      HttpResponseMessage response = await client.GetAsync(fullUri); 

      if (response.IsSuccessStatusCode) 
      { 
       tokenResponse = await response.Content.ReadAsAsync<TokenResponse>(); 
      } 
      else 
      { 
       if (response.StatusCode == HttpStatusCode.Forbidden) 
        throw new AuthenticationException("Invalid username/password combination."); 
       else 
        throw new ApplicationException("Not able to get token"); 
      } 
     } 

     return tokenResponse.access_token; 
    } 

    private async Task<LeadListResponse> GetListItems(string token, string listID) 
    { 

     string url = String.Format("https://XXXXXX.mktorest.com/rest/v1/list/{0}/leads.json?access_token={1}", listID, token);// Get from Marketo UI 
     var fullUri = new Uri(url, UriKind.Absolute); 

     LeadListResponse leadListResponse = new LeadListResponse(); 
     using (var client = new HttpClient()) 
     { 
      HttpResponseMessage response = await client.GetAsync(fullUri); 

      if (response.IsSuccessStatusCode) 
      { 
       leadListResponse = await response.Content.ReadAsAsync<LeadListResponse>(); 
      } 
      else 
      { 
       if (response.StatusCode == HttpStatusCode.Forbidden) 
        throw new AuthenticationException("Invalid username/password combination."); 
       else 
        throw new ApplicationException("Not able to get token"); 
      } 
     } 

     return leadListResponse; 
    } 


    private class TokenResponse 
    { 
     public string access_token { get; set; } 
     public int expires_in { get; set; } 
    } 

    private class LeadListResponse 
    { 
     public string requestId { get; set; } 
     public bool success { get; set; } 
     public string nextPageToken { get; set; } 
     public Lead[] result { get; set; } 
    } 

    private class Lead 
    { 
     public int id { get; set; } 
     public DateTime updatedAt { get; set; } 
     public string lastName { get; set; } 
     public string email { get; set; } 
     public DateTime datecreatedAt { get; set; } 
     public string firstName { get; set; } 
    } 
1

老问题,只是希望能够帮助未来的家伙谁从谷歌搜索:-)

本页面可能不存在的时候在这里结束这篇文章,但现在有一个很好的页面与几种语言的例子。该网页是在 http://developers.marketo.com/documentation/rest/get-multiple-leads-by-list-id

万一链接耗尽,这里是代码的例子,它们提供了C#

using Newtonsoft.Json; 
using System; 
using System.Collections.Generic; 
using System.IO; 
using System.Linq; 
using System.Net; 
using System.Text; 
using System.Threading.Tasks; 

namespace Samples 
{ 
    class LeadsByList 
    { 
     private String host = "CHANGE ME"; //host of your marketo instance, https://AAA-BBB-CCC.mktorest.com 
     private String clientId = "CHANGE ME"; //clientId from admin > Launchpoint 
     private String clientSecret = "CHANGE ME"; //clientSecret from admin > Launchpoint 
     public int listId; 
     public int batchSize;//max 300, default 300 
     public String[] fields;//array of field names to retrieve 
     public String nextPageToken;//paging token 
     /* 
     public static void Main(String[] args) 
     { 
      MultipleLeads leads = new MultipleLeads(); 
      leads.listId = 1001 
      String result = leads.getData(); 
      Console.WriteLine(result); 
      while (true) 
      { 

      } 
     } 
     */ 
     public String getData() 
     { 
      StringBuilder url = new StringBuilder(host + "/rest/v1/list/" + listId + "/leads.json?access_token=" + getToken()); 
      if (fields != null) 
      { 
       url.Append("&fields=" + csvString(fields)); 
      } 
      if (batchSize > 0 && batchSize < 300) 
      { 
       url.Append("&batchSize=" + batchSize); 
      } 
      if (nextPageToken != null) 
      { 
       url.Append("&nextPageToken=" + nextPageToken); 
      } 
      HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url.ToString()); 
      request.ContentType = "application/json"; 
      request.Accept = "application/json"; 
      HttpWebResponse response = (HttpWebResponse)request.GetResponse(); 
      Stream resStream = response.GetResponseStream(); 
      StreamReader reader = new StreamReader(resStream); 
      return reader.ReadToEnd(); 
     } 

     private String getToken() 
     { 
      String url = host + "/identity/oauth/token?grant_type=client_credentials&client_id=" + clientId + "&client_secret=" + clientSecret; 
      HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); 
      request.ContentType = "application/json"; 
      HttpWebResponse response = (HttpWebResponse)request.GetResponse(); 
      Stream resStream = response.GetResponseStream(); 
      StreamReader reader = new StreamReader(resStream); 
      String json = reader.ReadToEnd(); 
      //Dictionary<String, Object> dict = JavaScriptSerializer.DeserializeObject(reader.ReadToEnd); 
      Dictionary<String, String> dict = JsonConvert.DeserializeObject<Dictionary<String, String>>(json); 
      return dict["access_token"]; 
     } 
     private String csvString(String[] args) 
     { 
      StringBuilder sb = new StringBuilder(); 
      int i = 1; 
      foreach (String s in args) 
      { 
       if (i < args.Length) 
       { 
        sb.Append(s + ","); 
       } 
       else 
       { 
        sb.Append(s); 
       } 
       i++; 
      } 
      return sb.ToString(); 

     } 
    } 
} 

在这个响应的时间 - 这个页面拥有所有的API调用记录在案 http://developers.marketo.com/documentation/rest/