Derinlemesine yazılım eğitimleri için kanalımı takip edebilirsiniz...

C# – WordPressSharp İle WordPress’e Veri Post Etme

Merhaba,

Siz değerli okuyucularım bilirsiniz ki, her ne kadar son teknolojileri takip etmeye çalışsamda biryandan da otomasyonel yapılar üzerine her daim ilgilenmekte ve mümkün mertebe içerikler oluşturmaya özen göstermekteyim. Dolayısıyla günlük hayatta yapmış olduğumuz klasik bir işi yahut kullandığımız bir programı daha otomasyonel hale getirmek ve programatik olarak yönetebilmek için çabalar göstermekteyim. Son zamanlarda bir ihtiyaca istinaden üzerine çalıştığım bir bot ile elde ettiğim verileri WordPress temelli bir siteye eklemem gerekti. Haliyle bu gereklilik neticesinde WordPress sistemi üzerine veri akışını sağlamamıza yarayan WordPressSharp kütüphanesi ile tanıştım. İşte bu yazımızda WordPressSharp kütüphanesi aracılığıyla pratik bir şekilde C# programlama dili ile geliştirilmiş bir uygulama üzerinden nasıl herhangi bir WordPress temelli siteye içerik gönderileceğini inceleyeceğiz.

İlk olarak herhangi bir projeye WordPressSharp kütüphanesini entegre ederek başlayalım…
Solution Explorer penceresinden projeye sağ tıklayarak “Add” -> “Manage NuGet Packages…” kombinasyonuna tıkladığımızda açılan pencerenin “Browse” sekmesinde “WordPressSharp” değerini aşağıdaki ekran görüntüsünde olduğu gibi arattığımızda ilgili kütüphane ile ilgili modüller karşımıza gelmektedir. Artık üzerinde çalışılan projenin çekirdeğine(.NET Standart / .NET Core) göre ihtiyaca dönük olan modülü projeye entegre ediyoruz.

C# - WordPressSharp İle WordPress'e Veri Post Etme

Evet… İlgili kütüphane projeye entegre edilmiştir. Şimdi sıra üzerinde işlem yapılacak WordPress sisteminin kurulu olduğu server bilgileri ve temel yapılandırmalar için konfigürasyon ayarlarına gelmiş bulunmaktadır.

Temel Konfigürasyon Ayarları

            using (var client = new WordPressClient(new WordPressSiteConfig()
            {
                BaseUrl = "http://localhost:100/",
                BlogId = 1,
                Password = "12345",
                Username = "admin"
            }))
            {
               
            }

Yukarıdaki kod bloğunu incelerseniz eğer WordPress sistemiyle programatik olarak iletişim kuracak olan sınıfımız “WordPressClient” sınıfıdır. Bu sınıf; iletişim kurabilmek için sitenin adresini ve gerekli oturumsal izinleri edinebilmek içinse kullanıcı adı ve şifresini almaktadır. Burada verilen örnekte .NET Core sürümü için örneklendirme yapılmıştır. Eğer, proje .NET Standart çekirdeğinde olsaydı ilgili bilgileri App.Config dosyasında aşağıdaki formatta vermemiz yeterli olacaktı.

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
	<appSettings>
		<add key="WordPressUsername" value="admin" />
		<add key="WordPressPassword" value="12345" />
		<add key="WordPressBaseUrl" value="http://localhost:100/" />
		<add key="WordPressBlogId" value="1" />
	</appSettings>
</configuration>

Bu bilgiler neticesinde WordPress sistemi erişilebilir bir vaziyet almaktadır.

İçerik Post Etme

            using (var client = new WordPressClient(new WordPressSiteConfig()
            {
                BaseUrl = "http://localhost:100/",
                BlogId = 1,
                Password = "12345",
                Username = "admin"
            }))
            {
                var post = new Post
                {
                    PostType = "post",
                    Title = "Makale başlığı",
                    Content = "Makale içeriği",
                    PublishDateTime = DateTime.Now
                };

                var id = Convert.ToInt32(client.NewPost(post));
            }

İçerik post edebilmek için “WordPressSharp” kütüphanesiyle gelen “Post” sınıfını kullanmaktayız. İlgili sınıftan oluşturulan nesne içerisinde yukarıdaki örnek kod bloğunda olduğu gibi belirtilen bilgiler neticesinde ilgili WordPress sistemine içerik post edilmiş olunmaktadır.
C# – WordPressSharp İle WordPress’e Veri Post Etme

Etiket Oluşturma

Etiket oluşturabilmek için “Term” nesnesini kullanmaktayız.

            using (var client = new WordPressClient(new WordPressSiteConfig()
            {
                BaseUrl = "http://localhost:100/",
                BlogId = 1,
                Password = "12345",
                Username = "admin"
            }))
            {
                client.NewTerm(new Term
                {
                    Taxonomy = "post_tag",
                    Name = "Etiket adı",
                    Description = "Etiket açıklaması"
                });
            }

C# – WordPressSharp İle WordPress’e Veri Post Etme

Oluşturulan Etiketleri İçeriklerle İlişkilendirme

WordPress sisteminde etiketlerle içerikler arasındaki ilişki başlıktanda anlaşılacağı üzere bu iki unsurdan birinin önce oluşturulup(etiket) sonradan diğeriyle(içerik/yazı) ilişkilendirilmesi üzerine kurgulanmış bir senaryodan ibarettir.

Yani ilk olarak etiketler oluşturulur, sonra bu etiketler içeriklerle ilişkilendirilir.

            var terms = new List<Term> {
                new Term{ Taxonomy = "post_tag", Description = "e0", Name = "e0" },
                new Term{ Taxonomy = "post_tag", Description = "e1", Name = "e1" },
                new Term{ Taxonomy = "post_tag", Description = "e2", Name = "e2" },
                new Term{ Taxonomy = "post_tag", Description = "e3", Name = "e3" },
                new Term{ Taxonomy = "post_tag", Description = "e4", Name = "e4" },
            };

            using (var client = new WordPressClient(new WordPressSiteConfig()
            {
                BaseUrl = "http://localhost:100/",
                BlogId = 1,
                Password = "12345",
                Username = "admin"
            }))
            {
                //Wordpress'te ki mevcut etiketler elde ediliyor.
                Term[] allTerms = client.GetTerms("post_tag", new TermFilter() { });

                terms.ForEach(t =>
                {
                    Term term = allTerms.FirstOrDefault(x => x.Name == t.Name);
                    if (term == null)
                        //Eğer o etiket yoksa oluşturuluyor.
                        t.Id = client.NewTerm(t);
                    else
                        //Varsa direkt olarak id değeri alınıyor.
                        t.Id = term.Id;
                });

                var post = new Post
                {
                    PostType = "post",
                    Title = "Makale başlığı",
                    Content = "Makale içeriği",
                    PublishDateTime = DateTime.Now,
                    Terms = terms.ToArray() //Oluşturulan ya da mevcut olan tüm etiketler içerikle ilişkilendiriliyor.
                };

                var id = Convert.ToInt32(client.NewPost(post));
            }

C# – WordPressSharp İle WordPress’e Veri Post Etme

Dosya Yükleme

            using (var client = new WordPressClient(new WordPressSiteConfig()
            {
                BaseUrl = "http://localhost:100/",
                BlogId = 1,
                Password = "12345",
                Username = "admin"
            }))
            {
                var featureImage = Data.CreateFromUrl("http://www.gencayyildiz.com/images/gencayyildiz.jpg");
                client.UploadFile(featureImage);
            }

C# – WordPressSharp İle WordPress’e Veri Post Etme

Yüklenen Dosyayı İçerikle İlişkilendirme

Aynen etiketlerde olduğu gibi burada da önce dosya ardından içerik yüklenerek ilişkilendirme sağlanacaktır.

            using (var client = new WordPressClient(new WordPressSiteConfig()
            {
                BaseUrl = "http://localhost:100/",
                BlogId = 1,
                Password = "12345",
                Username = "admin"
            }))
            {
                var post = new Post
                {
                    PostType = "post",
                    Title = "Makale başlığı",
                    Content = "Makale içeriği",
                    PublishDateTime = DateTime.Now
                };

                var featureImage = Data.CreateFromUrl("http://www.gencayyildiz.com/images/gencayyildiz.jpg");
                post.FeaturedImageId = client.UploadFile(featureImage).Id;

                var id = Convert.ToInt32(client.NewPost(post));
            }

C# – WordPressSharp İle WordPress’e Veri Post Etme

İçeriğe Yorum Ekleme

Yorumlar için “Comment” nesnesini kullanmaktayız.

            using (var client = new WordPressClient(new WordPressSiteConfig()
            {
                BaseUrl = "http://localhost:100/thebeautifulwomen",
                BlogId = 1,
                Password = "23asjDnsd2",
                Username = "women"
            }))
            {
                var post = new Post
                {
                    PostType = "post",
                    Title = "Makale başlığı",
                    Content = "Makale içeriği",
                    PublishDateTime = DateTime.Now
                };

                var id = Convert.ToInt32(client.NewPost(post));
                client.NewComment(new Comment
                {
                    Author = "Nevin",
                    AuthorEmail = "karadenizliyizbiz@gmail.com",
                    AuthorUrl = "http://www.ne.vin",
                    PostTitle = "Örnek yorum",
                    Content = "Bu bir örnek yorumdur...",
                    DateCreated = DateTime.Now,
                    PostId = id.ToString()
                });
            }

C# – WordPressSharp İle WordPress’e Veri Post Etme

Evet… Bu noktadan itibaren C# ile programatik olarak WordPress’e nasıl içerik post edilebileceğini, resim yükleneceğini, etiketler ve yorumların ekleneceğini görmüş bulunmaktayız.

İlgilenenlerin faydalanması dileğiyle…
Sonraki yazılarımda görüşmek üzere…

İyi çalışmalar…

Bunlar da hoşunuza gidebilir...

22 Cevaplar

  1. Gençay dedi ki:

    İlgili içeriğe ek olarak;

    WordPressSharp kütüphesi ile kategori ekleyebilmek için Taxonomy değeri “category” olan Term nesnesi oluşturulması yeterlidir. Etiketlerle birebir aynı mantıkta oluşturulan kategoriler için etiketlerdeki tüm kontrollerin göz önüne alınarak oluşturulması ve kullanılmasını tavsiye ederim…

    İyi çalışmalar…

    • Faruk dedi ki:

      Bu öne çıkan resimdeki mantığı content için kullanmak istiyorum,belirlediğim linkleri upload ettikten sonra content yanı yazı içerisine aktarmak. Bunu yapmanın yolu nedir? ne gibi değişiklik olucak.

      • Gençay dedi ki:

        İsteğini biraz detaylandırabilir misin?

        • Faruk dedi ki:

          Dediğim olayı hallettim fakat bir şey merak ediyorum,

          var featureImage = Data.CreateFromUrl("http://www.gencayyildiz.com/images/gencayyildiz.jpg");
              post.FeaturedImageId = client.UploadFile(featureImage).Id;
          

          bu kodu kullandığımda siteye upload ettiği isim örneğin “gencayyildiz.jpg” oluyor.
          Aynı linki upload edip,ismini değiştirebileceğim bir api var mı ?
          mesela yine öneçıkan olarak http://www.gencayyildiz.com/images/gencayyildiz.jpg bu resimi alacak fakat upload ederkenki ismi resim1 olacak gibisinden.

          • Gençay dedi ki:

            “featureImage” referansındaki nesnede isim set edilebilir şekilde mevcut olabilir. Ben bakmadım, sizin göz atmanızı tavsiye ederim. Dönüşünüzü bekliyorum.
            Kolay gelsin.

  2. Faruk dedi ki:

    Kontrol ettim,dediğiniz gibi isim set edilebiliyordu
    featureImage.Name = “istediğinizresimimi.jpg” şeklinde yaparsanız alınan dosyayı bu şekilde upload ediyor.

  3. Serdar Ak dedi ki:

    Gençay bey merhaba. Ben aynı mantıkla sayfa açmaya çalışıyorum. Post_type = “page” şeklinde yazıldığında sayfa oluşturulabileceği yazıyor fakat hiçbir şekilde sayfa açamıyorum. sadece yazılar bölümüne post gönderebiliyorum. Yardımcı olur musunuz?

  4. Selim dedi ki:

    Hocam burada yazı post etmeyi anlatmışsınız. Öncelikle çok sağolun. Ancak bana asıl bu işlemin tam tersi lazım yani o yazıyı çekme yöntemi de lazım. Eklediğim yazıyı başka bir c# programla çekmem gerekiyor. Ve internetteki yöntemleri deneyince işlem zaman aşımına uğruyor. Buna çözüm bulamadım.

  5. Can dedi ki:

    Merhaba. Yazınız için teşekkürler.

    Postuma bir şekilde etiketleri ekledim. Şimdi kategorileri eklemem gerekiyor. Ne şekilde yapabilirim? Bir de temamda “actors” adında taksonomi var. Buraya nasıl ekleme yapabilirim? Aşağıda etiketlerim için kodum bulunmakta.

                        var t = new Term();
    
                        for (int g = 0; g < tagsParca.Length; g++)
                        {
                            t = new Term()
                            {
                                Taxonomy = &quot;post_tag&quot;,
                                Name = tagsParca[g]
                            };
    
                            var terms = client.GetTerms(&quot;post_tag&quot;, new TermFilter() { Search = t.Name });
    
                            if (terms == null)
                            {
                                t.Id = client.NewTerm(t);
                            }
                            else
                            {
                                foreach (var term in terms)
                                {
                                    t.Id = term.Id;
                                    break;
                                }
                            }
                            if (t.Id == null)
                            {
                                t.Id = client.NewTerm(t);
                            }
                        }
    

    Burada "tagsParca" dizisinde bulunan her eleman için işlem yaptırdım. Şimdi "actor" taksonomisine nasıl yaptırabilirim?

    Bir de çoklu kategori nasıl seçtirebilirim ismine göre?

    Teşekkürler.

  6. Ege dedi ki:

    Özel alanlara veri girme işlemi için bir kod bulunuyor mu ?

  7. cefa dedi ki:

    Sitede Bulunan postları ve post detaylarını çekme ile ilgili bilginiz var mı ?

  8. berkant dedi ki:

    resim tagi nasil ekleyebiiriz

  9. ferhat dedi ki:

    merhabalar bu mantık ile kullanıcı oluşturabilmem için ne yapmam gerekiyor

  10. Melih dedi ki:

    Merhaba, Kategori ve Etiketleri aynı anda kullanmayı bir türlü yapamadım rica etsem bunu örneklendirebilir misiniz?

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir