ccf4ab9f85
- Youtube Interactions Report with Chart and Summary - Statistics change in doc on refresh and get updated in db as well
113 lines
2.2 KiB
Python
113 lines
2.2 KiB
Python
# Copyright (c) 2013, Frappe Technologies Pvt. Ltd. and contributors
|
|
# For license information, please see license.txt
|
|
|
|
from __future__ import unicode_literals
|
|
import frappe
|
|
from frappe import _
|
|
from frappe.utils import flt
|
|
|
|
def execute(filters=None):
|
|
if not frappe.db.get_single_value("Video Settings", "enable_youtube_tracking") or not filters:
|
|
return [], []
|
|
|
|
columns = get_columns()
|
|
data = get_data(filters)
|
|
chart_data, summary = get_chart_summary_data(data)
|
|
return columns, data, None, chart_data, summary
|
|
|
|
def get_columns():
|
|
return [
|
|
{
|
|
"label": _("Published Date"),
|
|
"fieldname": "publish_date",
|
|
"fieldtype": "Date",
|
|
"width": 100
|
|
},
|
|
{
|
|
"label": _("Title"),
|
|
"fieldname": "title",
|
|
"fieldtype": "Data",
|
|
"width": 200
|
|
},
|
|
{
|
|
"label": _("Duration"),
|
|
"fieldname": "duration",
|
|
"fieldtype": "Duration",
|
|
"width": 100
|
|
},
|
|
{
|
|
"label": _("Views"),
|
|
"fieldname": "view_count",
|
|
"fieldtype": "Float",
|
|
"width": 200
|
|
},
|
|
{
|
|
"label": _("Likes"),
|
|
"fieldname": "like_count",
|
|
"fieldtype": "Float",
|
|
"width": 200
|
|
},
|
|
{
|
|
"label": _("Dislikes"),
|
|
"fieldname": "dislike_count",
|
|
"fieldtype": "Float",
|
|
"width": 100
|
|
},
|
|
{
|
|
"label": _("Comments"),
|
|
"fieldname": "comment_count",
|
|
"fieldtype": "Float",
|
|
"width": 100
|
|
}
|
|
]
|
|
|
|
def get_data(filters):
|
|
return frappe.db.sql("""
|
|
SELECT
|
|
publish_date, title, provider, duration,
|
|
view_count, like_count, dislike_count, comment_count
|
|
FROM `tabVideo`
|
|
WHERE view_count is not null
|
|
and publish_date between %(from_date)s and %(to_date)s
|
|
ORDER BY view_count desc""", filters, as_dict=1)
|
|
|
|
def get_chart_summary_data(data):
|
|
labels, likes, views = [], [], []
|
|
total_views = 0
|
|
|
|
for row in data:
|
|
labels.append(row.get('title'))
|
|
likes.append(row.get('like_count'))
|
|
views.append(row.get('view_count'))
|
|
total_views += flt(row.get('view_count'))
|
|
|
|
|
|
chart_data = {
|
|
"data" : {
|
|
"labels" : labels,
|
|
"datasets" : [
|
|
{
|
|
"name" : "Likes",
|
|
"values" : likes
|
|
},
|
|
{
|
|
"name" : "Views",
|
|
"values" : views
|
|
}
|
|
]
|
|
},
|
|
"type": "bar",
|
|
"barOptions": {
|
|
"stacked": 1
|
|
},
|
|
}
|
|
|
|
summary = [
|
|
{
|
|
"value": total_views,
|
|
"indicator": "Blue",
|
|
"label": "Total Views",
|
|
"datatype": "Float",
|
|
}
|
|
]
|
|
return chart_data, summary |