2016-08-09 2 views
2

해시 태그 검색을 사용하여 Instasharp 래퍼를 통해 Instagram 게시물을 가져 오려면 .net 콘솔 응용 프로그램을 사용하고 싶습니다.콘솔 응용 프로그램의 Instasharp

저는 C# .net 웹 양식을 광범위하게 사용하며 MVC 나 await 키워드 사용법에 익숙하지 않습니다. 아래의 코드 샘플은 실행되는 것처럼 보이지만 출력을 제공하지는 않습니다.

이 줄 :

var tagInfo = await tagApi.Get("soccer"); 

가 검색된 데이터 표시없이 호출 방법에 저를 돌려줍니다.

내가 여기서 잘못하고있는 것에 대해 통찰력을 줄 수있는 사람은 누구입니까?

public static async void GetInstagram(String tag, InstagramConfig config) 
{ 
    var instagramPosts = await LoadInstagramPosts(tag, config); 
    dynamic dyn = JsonConvert.DeserializeObject(instagramPosts.ToString()); 

     foreach (var data in dyn.data) 
     { 
      Console.WriteLine("{0} - {1}", data.filter, data.images.standard_resolution.url); 
     } 
    } 

    public static async Task<TagResponse> LoadInstagramPosts(String hashTagTerm, InstagramConfig config) 
    { 
     var tagApi = new InstaSharp.Endpoints.Tags(config); 
     var tagInfo = await tagApi.Get("soccer"); 
} 

EDITED 코드가 내 초기 문제를 해결 한 첫 번째 의견 뒤에 있습니다.

나는 가깝다고 느끼지만 뭔가가 여전히 누락되었습니다. 아래의 특정 질문을 참조하십시오 ...

나는 InstaSharp GitHub (https://github.com/InstaSharp/InstaSharp)의 문서에 코드를 기반으로합니다. GitHubs 예제는 MVC 애플리케이션을 기반으로하며, 광산은 MVC 프로젝트가 아니라 콘솔 애플리케이션입니다.

나는 아주 가까와서 다른 사람들이 내가이 문제를 해결하는 데 도움이 될 것이라고 생각합니다.

내 특정 질문 ... 1) OAuth 메소드에서 'code'매개 변수의 출처를 모르십니까 ?? 2) Instagram에서 필요한 콜백을 수행하는 방법 ??

var config = new InstaSharp.InstagramConfig(location.InstagramClientId, location.InstagramClientSecret, "http://localhost"); 
    string instagramLoginLink = InstagramLogin(config); 
    GetInstagram("soccer", config, instagramLoginLink); 
    public static async void GetInstagram(String tag, InstagramConfig config, string code) 
    { 
     OAuthResponse oAuthResponse = await OAuth(code, config); 
     var instagramPosts = await LoadInstagramPosts(tag, config, oAuthResponse); 
     if(instagramPosts.Data != null) 
     { 
      dynamic dyn = JsonConvert.DeserializeObject(instagramPosts.Data.ToString()); 

      foreach (var data in dyn.data) 
      { 
       Console.WriteLine("{0} - {1}", data.filter, data.images.standard_resolution.url); 
      } 
     } 
    } 

    public static string InstagramLogin(InstagramConfig config) 
    { 
     var scopes = new List<OAuth.Scope>(); 
     scopes.Add(InstaSharp.OAuth.Scope.Likes); 
     scopes.Add(InstaSharp.OAuth.Scope.Comments); 

     string link = InstaSharp.OAuth.AuthLink(config.OAuthUri + "authorize", config.ClientId, config.RedirectUri, scopes, InstaSharp.OAuth.ResponseType.Code); 

     return link; 
    } 

    public static async Task<OAuthResponse> OAuth(string code, InstagramConfig config) 
    { 
     // add this code to the auth object 
     var auth = new OAuth(config); 

     // now we have to call back to instagram and include the code they gave us 
     // along with our client secret 
     return await auth.RequestToken(code); 
    } 

    public static async Task<TagResponse> LoadInstagramPosts(String hashTagTerm, InstagramConfig config, OAuthResponse OAuth) 
    { 
     var tagApi = new InstaSharp.Endpoints.Tags(config, OAuth); 
     return await tagApi.Get("soccer"); 
    } 
+0

컴파일러가 코드에 대해 불평하고 있습니까? 'LoadInstagramPosts'는'Task '을 반환하지만 아무것도 반환하지 않습니다. Do return tagApi.Get ("Soccer"); ' – Crowcoder

+0

CrowCoder를 감사드립니다. 그 DID가 나를 호출하는 메소드로 리턴하는 것처럼 보입니다 ... 리턴 된 것은 무엇이든 실제 작업을하기 위해 비동기식 루틴을 벗어나야합니까? –

+0

아니요, 뭔가 기다리고있을 때 평범한 동기 호출처럼 처리 할 수 ​​있습니다. – Crowcoder

답변

0

나는 쇼에 약간 늦었지만 아직 내 대답은 인터넷 검색시이 질문을하는 사람을 도울 것입니다.

접근 방법의 주요 문제점은 Instagram이 OAuth 인증을 사용하고 있다는 것입니다. 원칙을 이해하기 위해 OAuth에서 Google을 제안하지만 실제적인 요점을 아래에서 설명하려고합니다.

OAuth 방식은 위의 스 니펫에있는 InstagramLogin 메소드의 결과가 코드이 아니라는 것을 의미합니다. 링크 Instagram 계정에 로그인 한 다음 응용 프로그램이 데이터에 액세스 할 수 있도록 사용자 (예 : 브라우저 또는 웹보기 사용)를 전송해야하는 곳 (소위 사용자 동의 화면) .

결국 사용자 동의 후 Instagram은 선택한 URL로 브라우저를 리디렉션합니다 (이전에 Instagram API -> Manage Clients (오른쪽 상단 구석)의 허용 된 리디렉션 URL 목록에 추가해야 함) -> 관리 할 클라이언트 생성/선택 -> 보안 탭)

중단 점을 설정하고 instagramLoginLink 값을 브라우저의 주소 상자에 복사 해보십시오. 인증 및 동의의 전체 흐름을 볼 수 있으며 마지막으로 브라우저에서 404를 생성 할 리디렉션 URL을 확인할 수 있습니다.

이 최종 링크는 get 매개 변수에 코드를 포함합니다. 보조 코드이며 액세스 토큰을 얻을 수 있습니다.이 코드는 URL에서 추출한 다음 OAuth.RequestToken으로 전화를 걸 때 사용됩니다.

PS : 예, 위에서 말하는 모든 당신이 인스 타 그램을 사용자에게 웹보기를 표시하고 어떻게 든 때 순간을 처리 인스 타 그램 또는 클라이언트 측 응용 프로그램에 사용자를 리디렉션하는 웹 응용 프로그램 실행 중 하나를해야한다는 것을 의미합니다 사용자를 리디렉션 URL로 다시 보냅니다. 코드를 잡고 계속 진행합니다.

관련 문제