FQL.Multiquery - 매개 변수로 전달할 때 쿼리 구문
-
12-12-2019 - |
문제
간단한 작업으로 약간의 도움을 찾고 있습니다 ... 쿼리를 매개 변수로 전달하는 Facebook 다중 쿼리의 구문.
여기 내 방법이 있습니다 :
public dynamic FBFQL(string strQuery)
{
try
{
var fb = new FacebookClient(this.FacebookAccessToken);
//dynamic objFQL = fb.Get("fql", new { q = strQuery });
dynamic objFQL = fb.Get("fql", new { q = new { strQuery } });
if (objFQL == null)
{
return null;
}
else
{
return objFQL;
}
}
catch (FacebookApiException ex)
{
FacebookErrorHandler(ex);
return null;
}
} //FB FQL
.
및 내 쿼리 구문 "
string strQuery = "friendsMovies = \"SELECT page_id, uid FROM page_fan WHERE type='MOVIE' AND uid IN (SELECT uid2 FROM friend WHERE uid1=me()) ORDER BY page_id\"," +
" movieDetails = \"SELECT page_id, name, pic, page_url, fan_count, genre, starring, release_date FROM page WHERE page_id IN (SELECT page_id FROM #friendsMovies) ORDER BY page_id\"";
.
그러나 불행히도 다음 오류가 발생합니다.나는 그것을 아무런 도움이되지 않는 몇 가지 방법을 시도했다.나는 그것이 단순한 것이 있다고 확신합니다 ... 나는이 시점에서 그것을 볼 수 없습니다.
(OAuthException - #601) (#601) Parser error: unexpected 'friendsMovies' at position 0.
.
사전에 고마워 차드
해결책
명명 된 쿼리와 함께 밖으로 알려져 있습니다 :
호출 방법을 처리하고 결과를 처리합니다.
public List<FacebookMovie> GetMoviesLikedByFriends()
{
string strQuery0 = "SELECT page_id, uid FROM page_fan WHERE type='MOVIE' AND uid IN (SELECT uid2 FROM friend WHERE uid1=me()) ORDER BY page_id";
string strQuery1 = "SELECT page_id, name, pic, page_url, fan_count, genre, starring, release_date FROM page WHERE page_id IN (SELECT page_id FROM #friendsMovies) ORDER BY page_id";
Dictionary<string, object> dicQuery = new Dictionary<string, object>();
dicQuery.Add("friendsMovies", strQuery0);
dicQuery.Add("movies", strQuery1);
FacebookSDKInterface objFQL = new FacebookSDKInterface();
dynamic objMoviesFriendsLike = objFQL.FBMFQL(dicQuery);
//To access a direct value: resultsMQFQL.data[0].fql_result_set[0].page_id
if (objMoviesFriendsLike != null) // shouldn't you check objFNU for being null here instead?
{
IEnumerable<dynamic> friendsMovies = (IEnumerable<dynamic>)objMoviesFriendsLike.data[0].fql_result_set; // explicit cast might not be necessary
IEnumerable<dynamic> movieDetails = (IEnumerable<dynamic>)objMoviesFriendsLike.data[1].fql_result_set; // explicit cast might not be necessary
IEnumerable<FacebookMovie> objMyFriendsMovies =
from Movie in movieDetails
join FriendsMovies in friendsMovies on (string)Movie.page_id equals (string)FriendsMovies.page_id
group FriendsMovies by new
{
ID = Movie.movie_id,
Link = Movie.page_url,
MovieName = Movie.name,
TotalLikes = Movie.fan_count,
Genre = Movie.genre,
Starring = Movie.starring,
ReleaseDate = Movie.release_date,
PicURL = Movie.pic
} into grp
where grp.Count() >= 2 //at least 2 friends must have liked it to show up
select new FacebookMovie()
{
Source = "Facebook",
ID = (string)grp.Key.ID,
SourceURL = (string)grp.Key.Link,
Name = (string)grp.Key.MovieName,
Picture = (string)grp.Key.PicURL,
TotalLikes = (long)grp.Key.TotalLikes,
Genre = (string)grp.Key.Genre,
Starring = (string)grp.Key.Starring,
ReleaseDate = (string)grp.Key.ReleaseDate,
FriendLikes = (int)grp.Count()
};
objMyFriendsMovies = objMyFriendsMovies.OrderByDescending(p => p.FriendLikes);
return objMyFriendsMovies.ToList();
}
else
{
return new List<FacebookMovie>();
}
}
.
쿼리를 수행하는 방법 :
public dynamic FBMFQL(Dictionary<string, object> dicQuery)
{
try
{
var fb = new FacebookClient(this.FacebookAccessToken);
dynamic objFQL = fb.Get("fql", new { q = dicQuery });
if (objFQL == null)
{
return null;
}
else
{
return objFQL;
}
}
catch (FacebookApiException ex)
{
FacebookErrorHandler(ex);
return null;
}
} //FB FQL
. 제휴하지 않습니다 StackOverflow