FQL.Multiquery-作为参数传递时的查询语法 [英] FQL.Multiquery - query syntax when passing as parameter

查看:105
本文介绍了FQL.Multiquery-作为参数传递时的查询语法的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

正在寻找一些简单任务的帮助... facebook多重查询的语法,您需要在其中将查询作为参数传递.

Looking for a little help with a simple task...the syntax for a facebook multi-query, where you'd pass in the query as a parameter.

这是我的方法:

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\"";

但是不幸的是,它给出了以下错误.我尝试了几种方法都无济于事.我敢肯定这很简单...我现在看不到它.

But unfortunately, it gives the following error. I've tried it several ways to no avail. I'm sure it's something simple...I just can't see it at this point.

(OAuthException - #601) (#601) Parser error: unexpected 'friendsMovies' at position 0.

先谢谢了 乍得

推荐答案

也可以通过命名查询来解决它:

Figured it out and with named queries too:

Calling方法并处理结果:

The Calling method and processes the result:

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

这篇关于FQL.Multiquery-作为参数传递时的查询语法的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆