۱۳۹۰/۰۶/۲۵

ارسال خودكار مطلب به بلاگر


اكثر خدمات گوگل داراي API هم هستند و به اين ترتيب با استفاده از برنامه نويسي نيز مي‌توان به آن‌ها دسترسي پيدا كرد. براي نمونه API دسترسي به Blogger در اينجا توضيح داده شده است. براي كار با اين امكانات يا مي‌توان چرخ را از نو اختراع كرد يا از كتابخانه‌هاي مرتبطي همانند Gdata API for .NET استفاده نمود. براي دات نت فريم ورك، از آدرس http://code.google.com/p/google-gdata/ مي‌توان آخرين كتابخانه‌هاي كار با GData يا Google Data API را دريافت كرد. براي نمونه فايل Google_Data_API_Setup_1.9.0.0.msi فعلي آن حدود 28 مگ حجم دارد و به درد كساني مي‌خورد كه علاقمند هستند تا تمام امكانات موجود آن‌را بررسي كنند. راه ساده‌تري هم براي دسترسي به اين كتابخانه‌ها وجود دارد؛ مي‌توان از NuGet استفاده كرد.


به اين ترتيب به سادگي و سرعت هرچه تمامتر فايل 200 كيلوبايتي Google.GData.Client.dll دريافت شده و ارجاعي نيز به آن اضافه خواهد شد. همين حد جهت كار با بلاگر كافي است.
براي نمونه قطعه كد زير كار ارسال يك مطلب جديد به وبلاگ بلاگري شما را انجام خواهد داد:

using System;
using System.Collections.Generic;
using Google.GData.Client;

namespace BloggerAutoPoster
{
    public class BloggerAutoPoster
    {
        public string UserName { set; get; }

        public string Password { set; get; }

        public string PostTitle { set; get; }

        public IList<string> PostTags { set; get; }

        public string PostBody { set; get; }

        public string BlogUrl { set; get; }

        public bool PostAsDraft { set; get; }

        public bool PostNewEntry()
        {
            var service = new Service("blogger", "blogger-example")
                {
                    Credentials = new GDataCredentials(UserName, Password)
                };
            var newPost = constructNewEntry();
            var result = service.Insert(new Uri(BlogUrl), newPost);
            return result != null;
        }

        private AtomEntry constructNewEntry()
        {
            var newPost = new AtomEntry
                {
                    Title = { Text = PostTitle },
                    Content = new AtomContent
                              {
                                  Content = string.Format(@"<div xmlns=""http://www.w3.org/1999/xhtml"">{0}</div>", PostBody),
                                  Type = "xhtml"
                              },
                    IsDraft = PostAsDraft
                };

            foreach (var tag in PostTags)
            {
                newPost.Categories.Add(
                    new AtomCategory
                    {
                        Term = tag,
                        Scheme = "http://www.blogger.com/atom/ns#"
                    });
            }

            return newPost;
        }
    }
}

مثالي از استفاده آن هم به صورت زير مي‌باشد:

new BloggerAutoPoster
{
      BlogUrl = "https://www.blogger.com/feeds/number/posts/default",
      UserName = "name@gmail.com",
      Password = "pass",
      PostTitle = "بررسي ارسل خودكار-3",
      PostTags = new List<string> { "بررسي ارسال خودكار" },
      PostBody = "تست مي‌شود123",
      PostAsDraft = false
}.PostNewEntry();

نام كاربري و كلمه عبور آن، همان مشخصات وارد شدن به اكانت جي‌ميل شما است. اگر مي‌خواهيد مطلب ارسالي بلافاصله در سايت ظاهر نشود PostAsDraft را true كنيد. همچنين BlogUrl آن، همانطور كه ملاحظه مي‌كنيد فرمت خاصي دارد. جهت يافتن آن مي‌توان از قطعه كد زير كمك گرفت:

using System;
using System.Collections.Generic;
using System.Linq;
using Google.GData.Client;

namespace BloggerAutoPoster
{
    public class BlogInfo
    {
        public string Title { set; get; }
        public string Url { set; get; }
    }

    public class BloggerInfo
    {
        public static IList<BlogInfo> FindMyBlogsUrls(string username, string password)
        {
            var result = new List<BlogInfo>();

            var service = new Service("blogger", "blogger-example")
            {
                Credentials = new GDataCredentials(username, password)
            };

            var query = new FeedQuery { Uri = new Uri("https://www.blogger.com/feeds/default/blogs") };
            var feed = service.Query(query);

            if (feed == null)
                throw new NotSupportedException("You don't have any blogs!");

            foreach (var entry in feed.Entries)
            {
                result.AddRange(entry.Links.Where(t => t.Rel.Equals("http://schemas.google.com/g/2005#post"))
                                           .Select(t => new BlogInfo
                                                        {
                                                            Url = new Uri(t.HRef.ToString()).AbsoluteUri,
                                                            Title = entry.Title.Text
                                                        }));
            }

            return result;
        }
    }
}

توسط كد فوق، آدرس ويژه و عنوان تمام بلاگ‌هاي ثبت شده‌ي بلاگري شما بازگشت داده مي‌شود.