Yazılım Mimarileri ve Tasarım Desenleri Üzerine

Asp.NET MVC İle Facebook’a Post Etme

Merhaba,

Oluşturduğunuz içerikleri, raporları yahut mesajları yazılımınız tarafından otomatik bir şekilde Facebook profilinize post etmek ister misiniz? O halde buyrun sizi bu içeriğimize davet ediyorum.

Her ne kadar “Asp.NET MVC İle.. ” diyerek içeriğe başlık atsamda bu makaledeki yöntem ile Asp.NET Web Form, MVC, Console ve Form Application uygulamalarında da aynı çalışmayı gerçekleştirebilirsiniz.

Öncelikle şunu bilmenizi istiyorum ki, Facebook ile yapılacak tüm işlemlerde bir Facebook uygulamasına ihtiyacınız vardır.

Uygulama oluşturmak için;

Yazımızda örnek çalışmayı Asp.NET MVC mimarisinde yapacağımızı tekrardan hatırlatarak projemizde Facebook Api’lerini kullanmamızı sağlayan sınıfları barındıran Facebook NuGet paketini aşağıdaki gibi projeye entegre ediniz.

Tüm bu işlemlerden sonra artık programatik kısma geçebiliriz.

    class FacebookPost
    {
        public void Post(string Mesaj)
        {
            string app_id = "*************";
            string app_secret = "*************";
            string scope = "publish_actions, manage_pages";

            if (HttpContext.Current.Request["code"] == null)
            {
                HttpContext.Current.Response.Redirect(string.Format(
                    "https://graph.facebook.com/oauth/authorize?client_id={0}&redirect_uri={1}&scope={2}",
                    app_id, HttpContext.Current.Request.Url.AbsoluteUri, scope));
            }
            else
            {
                Dictionary<string, string> tokens = new Dictionary<string, string>();

                string url = string.Format("https://graph.facebook.com/oauth/access_token?client_id={0}&redirect_uri={1}&scope={2}&code={3}&client_secret={4}",
                    app_id, HttpContext.Current.Request.Url.AbsoluteUri, scope, HttpContext.Current.Request["code"].ToString(), app_secret);

                HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest;

                using (HttpWebResponse response = request.GetResponse() as HttpWebResponse)
                {
                    StreamReader reader = new StreamReader(response.GetResponseStream());

                    string vals = reader.ReadToEnd();

                    foreach (string token in vals.Split('&'))
                    {
                        //meh.aspx?token1=steve&token2=jake&...
                        tokens.Add(token.Substring(0, token.IndexOf("=")),
                            token.Substring(token.IndexOf("=") + 1, token.Length - token.IndexOf("=") - 1));
                    }
                }

                string access_token = tokens["access_token"];

                var client = new FacebookClient(access_token);

                client.Post("/me/feed", new { message = Mesaj });
            }
        }
    }

Yukarıda oluşturmuş olduğumuz FacebookPost isimli sınıf içerisindeki Post metodu, kullanıldığı noktada Facebook kullanıcısından yetkileri Check(kontrol) edecek ve eğer yetkiler verildiyse(ki yahut verilmesede) Facebook tarafından aynı adrese yönlendirme işlemi gerçekleştirecektir. Tabi bu şekilde bir algoritmada yetki verilmediği her durumda tekrardan Facebook kullanıcısından yetki talebinde bulunulacaktır. (Yazımızı tam olarak bitirdikten sonra daha gelişmiş bir kullanımda örneklendirme yapacağız.)

    public class HomeController : Controller
    {
        public ActionResult Index()
        {
            FacebookPost post = new FacebookPost();
            post.Post("Merhaba, \n Bu mesaj programatik olarak gönderilmiştir. \n Gençay YILDIZ");
            return View();
        }
    }

Bu şekilde bir kullanım sonucunda projemizi derleyip çalıştırdığımızda aşağıdaki gibi bir süreç yaşayacağız.





Gördüğünüz gibi mesajımız programatik olarak Facebook’a başarıyla post edilmiştir.

Evet gördüğünüz gibi amacımıza tam olarak ermiş olduk. Şimdi yapmak istediğim, yetki kontrolü yapıldıktan sonra farklı sayfaya yönlendirme yaparak yetkiler verilmiş mi? verilmemiş mi? kontrol edip ona göre işlem yapmaktır.

Bu işlem için algoritmamızı biraz parçalayıp, yaklaşımımızı değiştirmemiz yeterlidir.

    class FacebookPost
    {
        string app_id = "1558218247814218";
        string app_secret = "dd36af3be249aa8342388a27f431b8fc";
        string scope = "publish_actions, manage_pages";

        public void Check()
        {
            UrlHelper url = new UrlHelper(HttpContext.Current.Request.RequestContext);
            string Yonlendirme = url.Action("PostPage", "Home");
            HttpContext.Current.Response.Redirect(string.Format(
                   "https://graph.facebook.com/oauth/authorize?client_id={0}&redirect_uri={1}&scope={2}",
                   app_id, "http://localhost:55948" + Yonlendirme, scope));
        }

        public void Post(string Mesaj)
        {

            if (HttpContext.Current.Request["code"] != null)
            {
                Dictionary<string, string> tokens = new Dictionary<string, string>();

                string url = string.Format("https://graph.facebook.com/oauth/access_token?client_id={0}&redirect_uri={1}&scope={2}&code={3}&client_secret={4}",
                    app_id, HttpContext.Current.Request.Url.AbsoluteUri, scope, HttpContext.Current.Request["code"].ToString(), app_secret);

                HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest;

                using (HttpWebResponse response = request.GetResponse() as HttpWebResponse)
                {
                    StreamReader reader = new StreamReader(response.GetResponseStream());

                    string vals = reader.ReadToEnd();

                    foreach (string token in vals.Split('&'))
                    {
                        //meh.aspx?token1=steve&token2=jake&...
                        tokens.Add(token.Substring(0, token.IndexOf("=")),
                            token.Substring(token.IndexOf("=") + 1, token.Length - token.IndexOf("=") - 1));
                    }
                }

                string access_token = tokens["access_token"];

                var client = new FacebookClient(access_token);

                client.Post("/me/feed", new { message = Mesaj });
            }
        }
    }

Gördüğünüz gibi Post ve Check işlemlerini parçalayarak farklı metodlara dağıttık. Yapmamız gereken, mesajı gönder talebinde bulunacağımız sayfada kullanıcı yetkilerini kontrol ederken(yani Check metodu kullanılacak) yetkilerin verilmesine görede mesajı post edeceğiz(yani Post metodu kullanılacak).

    public class HomeController : Controller
    {
        FacebookPost post = new FacebookPost();
        public ActionResult Index()
        {
            post.Check();
            return View();
        }

        public ActionResult PostPage()
        {
            post.Post("Merhaba, \n Bu mesaj programatik olarak gönderilmiştir. \n Gençay YILDIZ");
            return View();
        }
    }

Bu işlemlerden sonra projemizi derleyip çalıştırdığımızda, yetkilendirme adımlarından sonra aşağıdaki sahneyle karşılaşacak ve Facebook profilimizde postumuzu görebileceğiz.

Şahsen, üzerine çalıştığım platformların sosyal ağlarda yayınlanacak olan içeriklerinde kullanmayı düşündüğüm bir yapılandırma olacaktır. Ayriyetten editörlerin işlerini oldukça kolaylaştıran bir yaklaşımda sergilemektedir.

Tabi ki de geliştirmeye ve her projeye özel artı ve fikirlere açık bir Facebook Api’sidir.

Okuduğunuz için teşekkür ederim…
Sonraki yazılarımda görüşmek üzere…
İyi çalışmalar dilerim…

Exit mobile version