2012-06-26 2 views
1

내가 사용하여 쿼리의 결과를 검색 할 수 있었다 :Access 쿼리의 결과는 이전 버전의

버전 6에서
  var facebookClient = new Facebook.FacebookClient(accessToken); 
      const string fqlQuery = "select pic_big from user where uid=me()"; 
      dynamic result = facebookClient.Query(fqlQuery); 

      var profilePhotoUrl = result[0].pic_big.ToString(); 

, 내가 같은 작업을 수행 할 수 있지만, 사용 :

  var facebookClient = new Facebook.FacebookClient(accessToken); 
      const string fqlQuery = "select pic_big from user where uid=me()"; 
      dynamic result = facebookClient.Get("fql", new { q = fqlQuery }); 

      var profilePhotoUrl = result.data[0].pic_big.ToString(); //v6.0 requires us to add ".data[0]" field 

새로운 방식으로 작동하지만 단지 다음을 확인하고 싶습니다. result.data[0].pic_big.ToString()이 정확한지 확인하십시오.

답변

1

예 데이터 속성을 포함한 새 통화가 정확합니다. 나는 변화의 이유에 대해 확신하지 못한다. 데이터 속성을 포함하면 결과의 JSON 구조가 더 정확하지만 데이터 요소가 이미 존재하는지 여부는 알 수 없기 때문에 흉내낼 수 있습니다.

어쨌든 : 데이터 속성을 사용하면 지금부터가는 길입니다!

1

다음은 v6에서 .data이 필요한 이유에 대한 설명입니다.

v5에서는 그래프 api에서 아직 사용할 수 없었던 fql에 나머지 API를 사용했습니다. 나머지 API는 data을 감싸지 않았으므로 .data을 사용하지 않아도됩니다. v5의 이후 버전에서는 fb가 그래프 api를 사용하여 fql에 대한 지원을 발표했지만 v5의 변경 사항을 피하기 위해 sdk가 내부적으로 사용자에게 결과를 반환하기 전에 .data을 제거했습니다 (추한 해킹).

fql이 그래프 API를 사용할 때 v5가 작동하는 방식은 다음과 같습니다.

public virtual object Query(string fql) 
{ 
    if (string.IsNullOrEmpty(fql)) 
     throw new ArgumentNullException("fql"); 

    var parameters = new Dictionary<string, object>(); 
    parameters["q"] = fql; 

     // when using graph api 
    var result = (IDictionary<string, object>)Get("fql", parameters); 
    return result["data"]; 

    /* 
     // when using rest api 
    var parameters = new Dictionary<string, object>(); 
    parameters["query"] = fql; 
    parameters["method"] = "fql.query"; 

    return Get(parameters); 
    */ 
} 

그래서 사용자는이 투명성에 대해 알지 못했습니다. v6이 주요 릴리즈이기 때문에이 추악한 해킹 해결 방법으로 인해 Query을 삭제했습니다. fql을 사용하는 유일한 방법은 일반 get을 호출하는 것입니다. 이것이 fb가주는 정확한 결과를 반환하기 때문에 .data을 포함해야했습니다.

관련 문제