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.
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.
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ı" }); }
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)); }
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); }
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)); }
İç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() }); }
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…
İ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…
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.
İsteğini biraz detaylandırabilir misin?
Dediğim olayı hallettim fakat bir şey merak ediyorum,
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.
“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.
Kontrol ettim,dediğiniz gibi isim set edilebiliyordu
featureImage.Name = “istediğinizresimimi.jpg” şeklinde yaparsanız alınan dosyayı bu şekilde upload ediyor.
Geri dönüşün için teşekkür ederim 🙂
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?
Merhaba,
Kaynak kodunuzu paylaşabilir misiniz?
Hocam sorun “page” yerine “Page” yazmaktan kaynaklanmış. İlginize teşekkür ederim.
Çözüme dair dönüşünüz için teşekkür ederim.
Kolay gelsin.
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.
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.
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.
Taksonomiyi de hallettim. Sadece ada göre kategorileri ekleme kaldı.
Kategori ekleyebilmek için üstlerdeki yorumda bahsedilen usulü uygulayınız.
Özel alanlara veri girme işlemi için bir kod bulunuyor mu ?
Özel alandan kastınız nedir?
Sitede Bulunan postları ve post detaylarını çekme ile ilgili bilginiz var mı ?
Merhaba,
C# İle Bot Yapımı – Web Sitelerinden İçerik Çekme başlıklı makalemi okumanızı tavsiye ederim.
Kolay gelsin.
resim tagi nasil ekleyebiiriz
merhabalar bu mantık ile kullanıcı oluşturabilmem için ne yapmam gerekiyor
Merhaba, Kategori ve Etiketleri aynı anda kullanmayı bir türlü yapamadım rica etsem bunu örneklendirebilir misiniz?