Формат даты с помощью gviz_api.py

Я использую gviz_api (google-visualization-python) для создания некоторых линейных диаграмм. http://code.google.com/p/google-visualization-python/

Я редактировал пример диаграммы, взятый из документации Google. Тем не менее, я не уверен, как передать дату в DataTable

Здесь отредактированный пример, с которым я работал. https://gist.github.com/3941946

В этом коде у меня возник вопрос о

# Creating the data
 description = {"year": ("string", "Year"),
 "sales": ("number", "Sales"),
 "expenses": ("number", "Expenses")}
 data = [{"year": '2004', "sales": 1000, "expenses": 300}, 
 {"year": '2005', "sales": 1200, "expenses": 400}, 
 {"year": '2006', "sales": 1300, "expenses": 500}, 
 {"year": '2007', "sales": 1400, "expenses": 600}, 
 {"year": '2008', "sales": 1500, "expenses": 800}]
 # Loading it into gviz_api.DataTable
 data_table = gviz_api.DataTable(description)
 data_table.LoadData(data)

Как я могу загрузить дату в DataTable с помощью gviz_api?

Документация Google описывает, как создать новую Date() с помощью javascript, однако я бы хотел продолжать использовать gviz_api.py.

Заметки из документации Google от https://developers.google.com/chart/interactive/docs/dev/implementing_data_source#jsondatatable

* Модификации JSON Вспомогательные библиотеки Google и все запросы, отправленные в Google, возвращают немного нестандартную версию JSON/JSONP. Если вы не разбираете возвращенный код самостоятельно, это не имеет значения для вас. Клиент API визуализации поддерживает как стандартные, так и модифицированные версии JSON. Ниже приведен краткий обзор различий:

JSON не поддерживает значения JavaScript Date (например, "new Date (2008,1,28,0,31,26)", реализация API делает. Однако API теперь поддерживает настраиваемое JSON-представление даты в виде строки в следующем формате: Дата (год, месяц, день [, час, минута, секунда [, миллисекунда]]), где все послезавтра является необязательным, а месяцы основаны на нуле.

JSON использует двойные кавычки для клавиш словаря; в реализации API используются неупомянутые ключи.

JSON требует двойных кавычек вокруг строковых значений; реализация API использует одинарные кавычки. *

1 ответ

Фактически вы можете создавать даты так же, как и в стандартном Python - API обрабатывает преобразование в JS для вас. Все, что вам нужно сделать, это import datetime в начале вашего script, изменить тип столбца для year от string до date, а затем создать даты, как в стандартном Python:

# This is the first modification - importing the library
import datetime
import gviz_api
# page_template stays the same
# ...
def main():
 # Creating the data
 # Here we change the type of column "year" to "date"
 description = {"year": ("date", "Year"),
 "sales": ("number", "Sales"),
 "expenses": ("number", "Expenses")}
 # Here we switch out the string dates with an actual Python datetime.date
 # The conversion happens in the the subsequent functions, giving you a 
 # date that is usable in the JS
 data = [{"year": datetime.date(2007,3,7), "sales": 1000, "expenses": 300},
 {"year": datetime.date(2009,6,11), "sales": 1200, "expenses": 400},
 {"year": datetime.date(2009,3,1), "sales": 1300, "expenses": 500},
 {"year": datetime.date(2010,8,6), "sales": 1401, "expenses": 600},
 {"year": datetime.date(2011,7,13), "sales": 1500, "expenses": 800}]
 # Loading it into gviz_api.DataTable
 data_table = gviz_api.DataTable(description)
 data_table.LoadData(data)
 # Creating a JavaScript code string
 jscode = data_table.ToJSCode("jscode_data",
 columns_order=("year", "sales", "expenses"),
 order_by="year")
 # Creating a JSon string
 json = data_table.ToJSon(columns_order=("year", "sales", "expenses"),
 order_by="year")
 # Putting the JS code and JSon string into the template
 print "Content-type: text/html"
 print
 print page_template % vars()
if __name__ == '__main__':
 main()

licensed under cc by-sa 3.0 with attribution.