Facebook Graph Api Search with asp.net c#

by Eravse on Mayıs 8, 2010

Evet facebook graph api ile beraberinde artık search (arama ) yapabilir durumdayız .

JSON data olarak deri dönüşümü olan graph apinin kullanımı ile ilgili bir kaç örnek okuduktan sonradenemeler yapmaya başlamış durumdayım daha tam net olarak anlamış olamamakla birlikte sonuca yavaş yavaş ulaşabileceğimi umuyorum .

Belki kullanmış olduğum teknik bazılarınaza abes , uzun veya hatalı geliyor olabilir.Ama şu an itibari ile gelen bir data ve listelemesi mevucut . Nasıl yaptığın değil sonuca ulaşıp ulaşmadığının önemli olduğuna inanıyorum . Tabiki kod optimizasyonu yapan dostlarımız bu konuda yardımcı olurlarsa sevinirim.

oncelikle
JSON.cs dosyası lazım olacak bizlere

JSON js = new JSON();

        StringBuilder sb = new StringBuilder();
        byte[] buf = new byte[8192];

        HttpWebRequest request = (HttpWebRequest)
            WebRequest.Create("https://graph.facebook.com/search?q=watermelon&type=post");

        HttpWebResponse response = (HttpWebResponse)
            request.GetResponse();

        Stream resStream = response.GetResponseStream();

        string fbSearch = "";
        string tempString = null;
        int count = 0;

        do
        {
            // datayı buffera yaz
            count = resStream.Read(buf, 0, buf.Length);

            // okunacak data oldugundan emın ol
            if (count != 0)
            {

                tempString = Encoding.ASCII.GetString(buf, 0, count);

                sb.Append(tempString);
            }
        }
        while (count > 0); // okumak için data mevcutmu ?

        // eger data varsa stringe ata
        fbSearch += sb.ToString();

        JsonTextParser parser = new JsonTextParser();

        Hashtable ht = (Hashtable)JSON.JsonDecode(fbSearch);

        ArrayList keys = GetKeys(ht);

// grid e basmak icin datatable olustur
                        DataTable table = new DataTable("test");
                        table.Columns.Add("key", typeof(string));
                        table.Columns.Add("value", typeof(string));

        foreach (object obj in keys)
        {

            if (obj.ToString() == "data")
            {

                ArrayList values = (ArrayList)ht[obj];

                foreach (object obji in values)
                {

                    ArrayList keys2 = values;

                    foreach (object obj2 in keys2)
                    {
                        ArrayList valu1 = (ArrayList)keys2;

                        ArrayList o = GetKeys((Hashtable)obj2);
                        ArrayList v = GetValues((Hashtable)obj2);

                        int count1 = o.Count;

                        ArrayList a = new ArrayList();

                        for (int i = 0; i < count1; i++)
                        { 

                            table.Rows.Add(o[i].ToString(),v[i].ToString());

                        }

                        GridView1.DataSource = table;
                        GridView1.DataBind();

                    }              

                }

            }

        }

    }

    public static ArrayList GetKeys(Hashtable table)
    {
        return (new ArrayList(table.Keys));
    }

    public static ArrayList GetValues(Hashtable table)
    {
        return (new ArrayList(table.Values));
    }

belirttiğim gibi belki taklalar atarak sonuca ulastım ama çok da fena olmadı...
Sonuc olarak cıktı ekranımız

3 comments

Merhabalar güzel bir paylaşım ancak şöyle bir problemim var.
https://graph.facebook.com/search?q=watermelon&type=post
yerine
https://graph.facebook.com/search?q=müşteri hizmetleri&type=post
yazarsam ü yü ve ş’yi url encode ediyor ve sonuç getirmiyor. Bunu nasıl aşabilirim.

by Fatih Samet Çetin on 11 Ağustos 2010 at 02:49. #

Fatih bey bu konu hakkında biraz araştırma yaptım . Facebook developerda bu konu hakkında değil ama UTF 8 aramalar hakkında bug Bildirilmiş. Bug içeriğine Buradan ulaşabilirsiniz

birde mesela arama sonuçlarında \u0131 = ı harfi yerine geçmekte \u015e = ş harrfi yerine geçmekte belki burdan yola çıkarakta bir mantalite geliştirilebilir ama dediğim gibi bug mevcut oldugğu için sıkıntı çıkabilir.

by Eravse on 11 Ağustos 2010 at 08:43. #

Çok teşekkürler cevabınız için.

by Fatih Samet Çetin on 17 Aralık 2010 at 14:11. #

Leave your comment

Required.

Required. Not published.

If you have one.