Hack InoReader: How Many Feeds Have You Read In Recent 7 Days



من از Inoreader به عنوان سرویس Feed Reader استفاده می کنم. امروز می خواستم که تعداد آیتمهایی که در 7 روز اخیر خوانده ام را بدست بیاروم. ولی خود Inoreader این امکان را ندارد و بخش آمار ساده ای دارد. دو راه داشتم:
1- از Bar Chart خودش استفاده کنم و مجموع آیتم های خوانده شده در هفت روز اخیر را دستی حساب کنم.
2- کمی کد بنویسم.

می رویم سراغ راه دوم:

اول باید در Inoreader به قسمت Statistics بروید. البته اول مطمئن شوید که Developer Console باز است (Ctrl+Shift+I).


در قسمت Network در Developer Console ، در میان چند درخواست/پاسخی که برای index.php ارسال/دریافت شده است یکی از آن برای ما مهم است. برای پیدا کردن آن کافی است به قسمت Form Data هر کدام نگاه کنید. باید عبارت print_stats_chart را ببینید.



بعد از پیدا کردن درخواست/پاسخ مورد نظر، به سربرگ Response بروید و کل محتوای آن را کپی کنید.



آنچه به عنوان Response از سرور دریافت شده است چیزی شبیه این است:

<?xml version="1.0" encoding="utf-8" ?><xjx><cmd cmd="js">Smake_chart('stats_chart_0',[['Date','Articles posted','Articles read'],['27/12',0,0],['28/12',4685,299],['29/12',4858,547],['30/12',5519,172],['31/12',4893,229],['01/01',4401,137],['02/01',5368,211],['03/01',5412,268],['04/01',5031,84],['05/01',4956,251],['06/01',5703,188],['07/01',6192,33],['08/01',6132,206],['09/01',5566,131],['10/01',5343,165],['11/01',5136,102],['12/01',5098,142],['13/01',5889,352],['14/01',6290,81],['15/01',5955,70],['16/01',5779,144],['17/01',5465,132],['18/01',4794,69],['19/01',4481,215],['20/01',5839,282],['21/01',6275,176],['22/01',6308,182],['23/01',5764,24],['24/01',5539,356],['25/01',5060,161],['26/01',5249,324],['27/01',1717,204]],'');</cmd></xjx>

در ابتدا قسمت های قرمز رنگ را حذف می کنیم تا فقط اطلاعات مربوط به هر روز باقی بماند:

<?xml version="1.0" encoding="utf-8" ?><xjx><cmd cmd="js">Smake_chart('stats_chart_0',[['Date','Articles posted','Articles read'],['27/12',0,0],['28/12',4685,299],['29/12',4858,547],['30/12',5519,172],['31/12',4893,229],['01/01',4401,137],['02/01',5368,211],['03/01',5412,268],['04/01',5031,84],['05/01',4956,251],['06/01',5703,188],['07/01',6192,33],['08/01',6132,206],['09/01',5566,131],['10/01',5343,165],['11/01',5136,102],['12/01',5098,142],['13/01',5889,352],['14/01',6290,81],['15/01',5955,70],['16/01',5779,144],['17/01',5465,132],['18/01',4794,69],['19/01',4481,215],['20/01',5839,282],['21/01',6275,176],['22/01',6308,182],['23/01',5764,24],['24/01',5539,356],['25/01',5060,161],['26/01',5249,324],['27/01',1717,204]],'');</cmd></xjx>

سپس این اطلاعات را در یک آرایه ذخیره می کنیم (کافی است قسمت های آبی رنگ به آنها اضافه شود) :
var d=[
['27/12',0,0],['28/12',4685,299],['29/12',4858,547],['30/12',5519,172],['31/12',4893,229],['01/01',4401,137],['02/01',5368,211],['03/01',5412,268],['04/01',5031,84],['05/01',4956,251],['06/01',5703,188],['07/01',6192,33],['08/01',6132,206],['09/01',5566,131],['10/01',5343,165],['11/01',5136,102],['12/01',5098,142],['13/01',5889,352],['14/01',6290,81],['15/01',5955,70],['16/01',5779,144],['17/01',5465,132],['18/01',4794,69],['19/01',4481,215],['20/01',5839,282],['21/01',6275,176],['22/01',6308,182],['23/01',5764,24],['24/01',5539,356],['25/01',5060,161],['26/01',5249,324],['27/01',1717,204]
];
هر عنصر این آرایه اطلاعات مربوط به یک روز است که شامل تاریخ، مجموع آیتم های جدید آن روز و تعداد آیتم های خوانده شده در آن روز می باشد؛ مثلا:
'23/01' 5764 24 ]

در آخر هم با یک Map-Reduce ساده به زبان جاوااسکریپت و در همان بخش Console ابزار Developer Console کروم می توانید مجموع آیتم هایی که در 7 روز اخیر خوانده ایم را بدست بیاوریم:

d.slice(-7) .map(function(o){return o[2]}) .reduce(function(a,b){return a+b})
برای من خروجی این بود:
 1427