راهی از گوگل ریدر به گوگل پلاس و سپس به دنیای خارج!
اندازه‌ی قلم متن
تخمین مدت زمان مطالعه‌ی مطلب: سه دقیقه


از امروز قابلیت‌های اجتماعی گوگل ریدر با گوگل پلاس یکی شده و به همین جهت یک سری از امکانات قدیمی آن حذف گردیده‌اند؛ مانند به اشتراک گذاری و لایک زدن و غیره و تمام این‌ها با دکمه‌ی به علاوه یک گوگل پلاس جایگزین شده‌اند. اینبار می‌شود علاقمند‌ی‌ها را از گوگل ریدر به حلقه‌های گوگل پلاس هدایت کرد. همه‌ی این‌ها خوب؛ اما سیستم به اشتراک گذاری‌های روزانه‌ی من رو به هم ریخته این‌ کارها! قبلا از حاصل اشتراک‌ها در گوگل ریدر، یک فید تهیه می‌شد که الان دیگر وجود خارجی ندارد. هیچکدام از حلقه‌های گوگل پلاس هم فید ندارند. به این ترتیب این محصول، تبدیل به یک فیدخوان معمولی شده است. مثل 100ها برنامه‌ی مشابه دیگر.

اما ... در ادامه ببینیم که چطور می‌توان از گوگل ریدر جدید، راهی به خارج باز کرد!

الف) زمانیکه در محیط گوگل ریدر، بر روی دکمه به علاوه یک گوگل پلاس قرار گرفته در ذیل یک مطلب کلیک می‌کنید، می‌توان نام حلقه‌ای از حلقه‌های گوگل پلاس را انتخاب کرد تا مطلب ما به آن ارسال شود. یکی از این حلقه‌ها، Public نام دارد. بنابراین اینبار اگر قصد به اشتراک گذاری عمومی مطلبی را داشتید مطابق شکل زیر، حلقه Public را وارد نمائید و جالب اینجا است که این حلقه فقط در گوگل ریدر قابل انتخاب است؛ نه در خود گوگل پلاس.


ب) اکنون به اکانت گوگل پلاس خود مراجعه کنید. در قسمت پروفایل، به لینک بالای صفحه دقت نمائید. چیزی است شبیه به:

https://plus.google.com/u/0/userId/posts 

این userId برای ادامه کار مهم است.

ج) از این userId برای فراخوانی لینک زیر استفاده خواهیم کرد (userId آن باید جایگزین شود):

https://plus.google.com/_/stream/getactivities/?&sp=[1,2,"userId",null,null,null,null,"social.google.com",[]]


خروجی آن طبق معمول متداول گوگل، فرمت JSON است و می‌توان از آن لیست اشتراک‌های عمومی را استخراج کرد. برای نمونه کلاس GooglePlusJsonParser تهیه شده زیر می‌تواند این عملیات را انجام دهد:

using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Net;
//needs a ref. to System.Web.Extensions asm.
using System.Web.Script.Serialization;

namespace GooglePlus
{
[DebuggerDisplay("{DateTime}-{Title}-{Comment}-{Url}")]
public class GooglePlusItem
{
public DateTime DateTime { set; get; }
public string Url { set; get; }
public string Title { set; get; }
public string Comment { set; get; }
}

public static class Utils
{
public static DateTime ConvertFromUnixTimestamp(this long data)
{
return new DateTime(1970, 1, 1, 0, 0, 0, 0).AddSeconds(data);
}

public static string ToSafeString(this object data)
{
return data == null ? string.Empty : data.ToString();
}
}

public class GooglePlusJsonParser
{
public static IList<GooglePlusItem> GetMyPublicItemsList(string userId)
{
var url = string.Format("https://plus.google.com/_/stream/getactivities/?&sp=[1,2,\"{0}\",null,null,null,null,\"social.google.com\",[]]", userId);
var jsonData = new WebClient().DownloadString(url);
return ParsePublicData(jsonData);
}

public static IList<GooglePlusItem> ParsePublicData(string jsonData)
{
jsonData = removeRedundantData(jsonData);
var posts = parseJson(jsonData);
return createItemsList(posts);
}

private static IList<GooglePlusItem> createItemsList(object[] posts)
{
var result = new List<GooglePlusItem>();
foreach (object[] post in posts)
{
var items = (object[])((object[])post[66])[0];
result.Add(new GooglePlusItem
{
DateTime = (((Int64)post[5]) / 1000).ConvertFromUnixTimestamp(),
Title = items[3].ToSafeString(),
Url = items[1].ToSafeString(),
Comment = post[4].ToSafeString()
});
}
return result;
}

private static object[] parseJson(string jsonData)
{
var jsonObject = new JavaScriptSerializer().Deserialize<object[]>(jsonData);
var posts = (object[])(((object[])jsonObject[1])[0]);
return posts;
}

private static string removeRedundantData(string jsonData)
{
return jsonData.Replace(")]}'", string.Empty)
.Replace("[,", "[\"\",")
.Replace(",,", ",\"\",")
.Replace(",,", ",\"\",");
}
}
}

نحوه استفاده از آن هم می‌تواند فراخوانی متد GooglePlusJsonParser.GetMyPublicItemsList به همراه userId یاده شده باشد.



ایده اصلی از:
Getting the Google+ Feed for any profile in JSON


  • #
    ‫۱۲ سال و ۱۲ ماه قبل، چهارشنبه ۱۱ آبان ۱۳۹۰، ساعت ۰۴:۴۹
    البته در خود جی پلاس هم می شود Public فرستاد ، مختص گوگل ریدر نیست .
  • #
    ‫۱۲ سال و ۱۲ ماه قبل، چهارشنبه ۱۱ آبان ۱۳۹۰، ساعت ۱۲:۵۸
    بله؛ هنگام ارسال یک مطلب جدید داخل گوگل پلاس وجود داد. اما هنگام ویرایش یک مطلب محدود شده وجود ندارد و قابل انتخاب نیست (یا حداقل برای من نبود). از گوگل ریدر به یکی از دوایر ارسال کردم. به این صورت محدود شده ارسال می‌شود. بعد دیگر قابل عمومی کردن نیست یا نبود.
  • #
    ‫۱۲ سال و ۱۲ ماه قبل، چهارشنبه ۱۱ آبان ۱۳۹۰، ساعت ۱۲:۵۸
    یک نکته تکمیلی مهم:
    قسمت DownloadString و دریافت اطلاعات از وب کد فوق باید به صورت زیر اصلاح شود:
    new WebClient { Encoding = Encoding.UTF8 }.DownloadString
    در غیر اینصورت با متون فارسی مشکل خواهد داشت.
  • #
    ‫۱۲ سال و ۱۲ ماه قبل، چهارشنبه ۱۱ آبان ۱۳۹۰، ساعت ۱۳:۲۰
    درسته اگر یک مطلبی را بصورت Limited نشر داده باشین در حالت ویرایش نمیشه اونرو به Public تغییر بدین و باید اون مطلب رو دوباره بزنیم بازنشر داده بشه و اون موقع Public رو انتخاب کنیم ،

    یک مشکلی هم که خیلی ها بعد از ایجاد تغییرات جدید به گودر می گیرند اینه که اگر بخوای مطلبی رو نشر بدی حتما باید اونرو +1 کنی و بعد نشر بدی درصورتی که شاید اون مطلب رو دوست نداشته باشی ،
    ولی اینکار لازم نیست ، اگر در گودر در حال مطالعه مطلبی هستید وقتی در نوار سیاه رنگ بالا روی دکمه  [Share...] کلیک کنید ، خودش لینک مطلبی رو که در حال مطالعه اش هستید تشخیص میده و به متن شما وصله می کنه ، برای بعضی ها کلا شاید این شیوه نشر دادن مطالب راحت تر باشه .
  • #
    ‫۱۲ سال و ۱۲ ماه قبل، چهارشنبه ۱۱ آبان ۱۳۹۰، ساعت ۱۳:۳۵
    تائید میشه(منم تست کردم)
    وقتی مطلبی رو برای حلقه خاصی شیر کنی نمیتونی Public ش کنی البته میشه از extended circles استفاده کرد(تمام افراد حلقه های شما و افرادی که تو حلقه های اون افراد هستن)
    http://weeklydownload.com/2011/07/possible-privacy-hole-in-google/

    یه مورد دیگه از Bookmarklet زیر برای شیر کردن مطالب خارج از +G میتونید استفاده کنید
    http://allanjosephbatac.com/gplus-bookmarklet.php