PK"hFHQ[ cmsplugin_googleplus/__init__.py__version__ = '0.6.0' PK}G4~ cmsplugin_googleplus/models.pyfrom __future__ import unicode_literals from cms.models.pluginmodel import CMSPlugin from django.core.cache import cache from django.core.exceptions import ValidationError from django.core.validators import MaxValueValidator, MinValueValidator from django.db import models from django.utils.translation import ugettext_lazy as _ from .conf import GOOGLEPLUS_PLUGIN_TEMPLATES from .globals import ( GOOGLEPLUS_PLUGIN_LANGUAGE_CHOICES, GOOGLEPLUS_PLUGIN_ORDER_BY_CHOICES, RECENT) class GooglePlusActivities(CMSPlugin): """ Plugin for including Google+ activities """ render_template = models.CharField( _('template'), max_length=100, choices=GOOGLEPLUS_PLUGIN_TEMPLATES) items = models.SmallIntegerField( _('item'), default=5, validators=[MaxValueValidator(20), MinValueValidator(1)], help_text=_("Number of Google Plus activities to return. " "From 1 to 100. Default is 10."),) truncate_chars = models.PositiveIntegerField( _('truncate chars'), default=150, help_text=_('Truncates the content, annotation and attachment after a ' 'certain number of characters.')) google_user = models.CharField( _('Google+ User Id'), blank=True, help_text=_('The ID of the user to get activities for'), max_length=75) query = models.CharField( _('search query'), max_length=250, blank=True, help_text=_('Full-text search query string.')) preferred_language = models.CharField( _('preferred language'), blank=True, max_length=10, choices=GOOGLEPLUS_PLUGIN_LANGUAGE_CHOICES, help_text=_('Optional. Specify the preferred language to search with.') ) order_by = models.CharField( _('order by'), max_length=20, choices=GOOGLEPLUS_PLUGIN_ORDER_BY_CHOICES, default=RECENT, blank=True, help_text=_("Optional. Specifies how to order search results. 'best': " "Sort activities by relevance to the user, most relevant " "first, 'recent': Sort activities by published date, most " "recent first.")) google_api_key = models.CharField( _('Google API key'), help_text=_('To use the Google+ API, you must register your project ' 'on the Google Developers Console and get a Google ' 'API key.'), max_length=75) def __unicode__(self): return ('Google User id: %s' % self.google_user) \ if self.google_user else ('Search Query: %s' % self.query) def save(self, *args, **kwargs): """ Save and invalidate cached activities """ super(GooglePlusActivities, self).save(*args, **kwargs) key = self.get_cache_key() cache.delete(key) def clean(self): if not self.google_user and not self.query: raise ValidationError( _('"Google+ user id" or "Search query" must be provided')) def get_cache_key(self, search=False): if self.pk: if self.google_user: return 'google_plus_user_activities_%d' % self.pk else: return 'google_plus_search_activities_%d' % self.pk return None PKLU}G>"cmsplugin_googleplus/googleplus.pyfrom __future__ import unicode_literals import logging from django.conf import settings from googleapiclient.discovery import build from googleapiclient.errors import HttpError logger = logging.getLogger(__name__) class GooglePlusAPI(object): """ Simple wrapper for the Google Plus API. The Google documentation is `here `_. """ def __init__(self, developer_key): """ Builds a Google Plus service object. :param developer_key: Key for controlling API usage, obtained from the `API Console `_. :type developer_key: str """ self.service = build( serviceName='plus', version='v1', developerKey=developer_key) def get_user_activity_list(self, user_id, collection='public', results=10): """ Get a list is activities from a Google Plus User. An activity is a note that a user posts to their stream. The Google documentation is `here `_. :param collection: The collection of activities to list :param user_id: The ID of the user to get activities for :param results: The number of activities to include in the response for any response, the actual number returned might be less than the specified results. To keep the application simple acceptable values are 1 to 20, inclusive. Default is 10. :type collection: str :type user_id: unicode or str :type results: unsigned integer :raises: TypeError, ValueError :returns: The list of user activities """ if self.service: try: activities_resource = self.service.activities() request = activities_resource.list( userId=user_id, collection=collection, maxResults=results, fields='items') activities_document = request.execute() if 'items' in activities_document: return activities_document['items'] else: return [] except HttpError as e: logger.exception('Google Plus API error: % s' % e) if not settings.DEBUG: # fail silently if it's not possible to connect to # the service return [] else: raise def get_search_activity_list(self, query, preferred_language=None, order_by=None, results=10): """ Get a list is activities from a Google Plus User. An activity is a note that a user posts to their stream. The Google documentation is `here `_. :param query: Full-text search query string. :param preferred_language: Specify the preferred language to search with. See `search language codes `_ for available values. :param order_by: Specifies how to order search results. Acceptable values are: "best": Sort activities by relevance to the user, most relevant first. "recent": Sort activities by published date, most recent first. (default) :param results: The number of activities to include in the response for any response, the actual number returned might be less than the specified results. To keep the application simple acceptable values are 1 to 20, inclusive. Default is 10. :type query: unicode :type preferred_language: str :type order_by: str :type results: unsigned integer :returns: The list of activities, result of the search. """ if self.service: try: activities_resource = self.service.activities() data = { 'query': query, 'maxResults': results, 'fields': 'items'} if preferred_language: data.update({'language': preferred_language}) if order_by: data.update({'orderBy': order_by}) request = activities_resource.search(**data) activities_document = request.execute() if 'items' in activities_document: return activities_document['items'] else: return [] except HttpError as e: logger.exception('Google Plus API error: % s' % e) if not settings.DEBUG: # fail silently if it's not possible to connect to the # service return [] else: raise PK}G6#cmsplugin_googleplus/cms_plugins.pyfrom __future__ import unicode_literals from cms.plugin_base import CMSPluginBase from cms.plugin_pool import plugin_pool from dateutil.parser import parse from django.core.cache import cache from django.utils.translation import ugettext_lazy as _ from .conf import GOOGLEPLUS_PLUGIN_CACHE_DURATION from .googleplus import GooglePlusAPI from .models import GooglePlusActivities class GooglePlusActivitiesPlugin(CMSPluginBase): """ Plugin for including Google+ activities """ model = GooglePlusActivities name = _("Google Plus Activity Feed") render_template = False fieldsets = ( (_('Settings'), { 'fields': ('google_api_key', ) }), (_('Layout'), { 'fields': ('render_template', 'items', 'truncate_chars') }), (_('Activity List'), { 'description': _('List of the activities in the specified ' 'collection for a particular user.'), 'fields': ('google_user',) }), (_('Activity Search'), { 'description': _('Search public activities. ' 'These fields are ignored if the "Google+ ' 'User Id" is filled.'), 'fields': ('query', 'preferred_language', 'order_by') }), ) def render(self, context, instance, placeholder): context['instance'] = instance activity_list = self.get_latest_activities(instance) \ if instance.google_user else self.get_search_activities(instance) context['activity_list'] = self.parse_datetime(activity_list) return context def get_latest_activities(self, instance): """ :param instance: the GooglePlusActivities instance :type instance: GooglePlusActivities :returns: list of dictionaries -- the recent activities: https://developers.google.com/+/api/latest/activities Note: Activities are returned from the activities.list method in the same order that they are displayed on the google+ page. This means that while the first pages contain newer activities, older activities may be bumped up. See `this open ticket `_ """ key_name = instance.get_cache_key(instance.pk) activity_list = cache.get(key_name, None) if not activity_list: googleplus_api = GooglePlusAPI( developer_key=instance.google_api_key) activity_list = googleplus_api.get_user_activity_list( user_id=instance.google_user, results=instance.items) cache.set(key_name, activity_list, GOOGLEPLUS_PLUGIN_CACHE_DURATION) return activity_list def get_search_activities(self, instance): key_name = instance.get_cache_key(instance.pk) activity_list = cache.get(key_name, None) if not activity_list: googleplus_api = GooglePlusAPI( developer_key=instance.google_api_key) activity_list = googleplus_api.get_search_activity_list( query=instance.query, preferred_language=instance.preferred_language, order_by=instance.order_by, results=instance.items) cache.set(key_name, activity_list, GOOGLEPLUS_PLUGIN_CACHE_DURATION) return activity_list def parse_datetime(self, activity_list): """ Cleans up the activities given by the api: Google+ API uses RFC3339 format for dates like published date of an activity. We need to parse these dates so they will be displayed in a nicer way. """ parsed_activity_list = [] for activity in activity_list: published = activity.get('published', None) updated = activity.get('updated', None) if published: activity['published'] = parse(published) if updated: activity['updated'] = parse(updated) parsed_activity_list.append(activity) return parsed_activity_list plugin_pool.register_plugin(GooglePlusActivitiesPlugin) PKS}G간V V cmsplugin_googleplus/globals.pyfrom __future__ import unicode_literals from django.utils.translation import ugettext_lazy as _ # The following language codes are available for search methods in people # and activities resources # https://developers.google.com/+/api/search#available-languages AFRIKAANS = 'af' AMHARIC = 'am' ARABIC = 'ar' BASQUE = 'eu' BENGALI = 'bn' BULGARIAN = 'bg' CATALAN = 'ca' CHINESE_HONG_KONG = 'zh-HK' CHINESE_SIMPLIFIED = 'zh-CN' CHINESE_TRADITIONAL = 'zh-TW' CROATIAN = 'hr' CZECH = 'cs' DANISH = 'da' DUTCH = 'nl' ENGLISH_UK = 'en-GB' ENGLISH_US = 'en-US' ESTONIAN = 'et' FILIPINO = 'fil' FINNISH = 'fi' FRENCH = 'fr' FRENCH_CANADIAN = 'fr-CA' GALICIAN = 'gl' GERMAN = 'de' GREEK = 'el' GUJARATI = 'gu' HEBREW = 'iw' HINDI = 'hi' HUNGARIAN = 'hu' ICELANDIC = 'is' INDONESIAN = 'id' ITALIAN = 'it' JAPANESE = 'ja' KANNADA = 'kn' KOREAN = 'ko' LATVIAN = 'lv' LITHUANIAN = 'lt' MALAY = 'ms' MALAYALAM = 'ml' MARATHI = 'mr' NORWEGIAN = 'no' PERSIAN = 'fa' POLISH = 'pl' PORTUGUESE_BRAZIL = 'pt-BR' PORTUGUESE_PORTUGAL = 'pt-PT' ROMANIAN = 'ro' RUSSIAN = 'ru' SERBIAN = 'sr' SLOVAK = 'sk' SLOVENIAN = 'sl' SPANISH = 'es' SPANISH_LATIN_AMERICA = 'es-419' SWAHILI = 'sw' SWEDISH = 'sv' TAMIL = 'ta' TELUGU = 'te' THAI = 'th' TURKISH = 'tr' UKRAINIAN = 'uk' URDU = 'ur' VIETNAMESE = 'vi' ZULU = 'zu' GOOGLEPLUS_PLUGIN_LANGUAGE_CHOICES = ( (AFRIKAANS, _('Afrikaans')), (AMHARIC, _('Amharic')), (ARABIC, _('Arabic')), (BASQUE, _('Basque')), (BENGALI, _('Bengali')), (BULGARIAN, _('Bulgarian')), (CATALAN, _('Catalan')), (CHINESE_HONG_KONG, _('Chinese (Hong Kong)')), (CHINESE_SIMPLIFIED, _('Chinese (Simplified)')), (CHINESE_TRADITIONAL, _('Chinese (Traditional)')), (CROATIAN, _('Croatian')), (CZECH, _('Czech')), (DANISH, _('Danish')), (DUTCH, _('Dutch')), (ENGLISH_UK, _('English (UK)')), (ENGLISH_US, _('English (US)')), (ESTONIAN, _('Estonian')), (FILIPINO, _('Filipino')), (FINNISH, _('Finnish')), (FRENCH, _('French')), (FRENCH_CANADIAN, _('French (Canadian)')), (GALICIAN, _('Galician')), (GERMAN, _('German')), (GREEK, _('Greek')), (GUJARATI, _('Gujarati')), (HEBREW, _('Hebrew')), (HINDI, _('Hindi')), (HUNGARIAN, _('Hungarian')), (ICELANDIC, _('Icelandic')), (INDONESIAN, _('Indonesian')), (ITALIAN, _('Italian')), (JAPANESE, _('Japanese')), (KANNADA, _('Kannada')), (KOREAN, _('Korean')), (LATVIAN, _('Latvian')), (LITHUANIAN, _('Lithuanian')), (MALAY, _('Malay')), (MALAYALAM, _('Malayalam')), (MARATHI, _('Marathi')), (NORWEGIAN, _('Norwegian')), (PERSIAN, _('Persian')), (POLISH, _('Polish')), (PORTUGUESE_BRAZIL, _('Portuguese (Brazil)')), (PORTUGUESE_PORTUGAL, _('Portuguese (Portugal)')), (ROMANIAN, _('Romanian')), (RUSSIAN, _('Russian')), (SERBIAN, _('Serbian')), (SLOVAK, _('Slovak')), (SLOVENIAN, _('Slovenian')), (SPANISH, _('Spanish')), (SPANISH_LATIN_AMERICA, _('Spanish (Latin America)')), (SWAHILI, _('Swahili')), (SWEDISH, _('Swedish')), (TAMIL, _('Tamil')), (TELUGU, _('Telugu')), (THAI, _('Thai')), (TURKISH, _('Turkish')), (UKRAINIAN, _('Ukrainian')), (URDU, _('Urdu')), (VIETNAMESE, _('Vietnamese')), (ZULU, _('Zulu')), ) BEST = 'best' RECENT = 'recent' GOOGLEPLUS_PLUGIN_ORDER_BY_CHOICES = ( (BEST, _('best')), (RECENT, _('recent')) ) PK|}GBcmsplugin_googleplus/conf.pyfrom __future__ import unicode_literals from django.conf import settings from django.utils.translation import ugettext_lazy as _ DEFAULT_PLUGIN_TEMPLATES = ( ('cmsplugin_googleplus/twitter_bootstrap.html', _('Example Template using Twitter Bootstrap')), ) GOOGLEPLUS_PLUGIN_CACHE_DURATION = getattr( settings, 'GOOGLEPLUS_PLUGIN_CACHE_DURATION', 60*5) GOOGLEPLUS_PLUGIN_TEMPLATES = getattr( settings, 'GOOGLEPLUS_PLUGIN_TEMPLATES', DEFAULT_PLUGIN_TEMPLATES) PKeFH^U__4cmsplugin_googleplus/locale/pl/LC_MESSAGES/django.po# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # # Translators: # Michał Fita , 2016 msgid "" msgstr "" "Project-Id-Version: cmsplugin-googleplus\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2015-11-29 17:50+0100\n" "PO-Revision-Date: 2016-01-30 17:02+0000\n" "Last-Translator: Michał Fita \n" "Language-Team: Polish (http://www.transifex.com/itbabu/cmsplugin-googleplus/language/pl/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: pl\n" "Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" #: cms_plugins.py:19 msgid "Google Plus Activity Feed" msgstr "Kanał aktywności Google Plus" #: cms_plugins.py:22 msgid "Settings" msgstr "Ustawienia" #: cms_plugins.py:25 msgid "Layout" msgstr "Układ" #: cms_plugins.py:28 msgid "Activity List" msgstr "Lista aktywności" #: cms_plugins.py:29 msgid "" "List of the activities in the specified collection for a particular user." msgstr "Wykaz aktywności w określonej kolekcji dla danego użytkownika." #: cms_plugins.py:33 msgid "Activity Search" msgstr "Szukanie aktywności" #: cms_plugins.py:34 msgid "" "Search public activities. These fields are ignored if the \"Google+ User " "Id\" is filled." msgstr "Szukaj publicznej aktywności. Te pola są ignorowane, jeśli wypełnione jest \"Google+ id użytkownika\"." #: conf.py:8 msgid "Example Template using Twitter Bootstrap" msgstr "Przykładowy szablon używający Twitter Bootstrap" #: globals.py:71 msgid "Afrikaans" msgstr "Afrykanerski" #: globals.py:72 msgid "Amharic" msgstr "Amharski" #: globals.py:73 msgid "Arabic" msgstr "Arabski" #: globals.py:74 msgid "Basque" msgstr "Baskijski" #: globals.py:75 msgid "Bengali" msgstr "Bengalski" #: globals.py:76 msgid "Bulgarian" msgstr "Bułgarski" #: globals.py:77 msgid "Catalan" msgstr "Kataloński" #: globals.py:78 msgid "Chinese (Hong Kong)" msgstr "Chiński (Honk Kong)" #: globals.py:79 msgid "Chinese (Simplified)" msgstr "Chiński (Tradycyjny)" #: globals.py:80 msgid "Chinese (Traditional)" msgstr "Chiński (Uproszczony)" #: globals.py:81 msgid "Croatian" msgstr "Chorwacki" #: globals.py:82 msgid "Czech" msgstr "Czeski" #: globals.py:83 msgid "Danish" msgstr "Duński" #: globals.py:84 msgid "Dutch" msgstr "Holenderski" #: globals.py:85 msgid "English (UK)" msgstr "Angielski (Brytyjski)" #: globals.py:86 msgid "English (US)" msgstr "Angielski (Amerykański)" #: globals.py:87 msgid "Estonian" msgstr "Estoński" #: globals.py:88 msgid "Filipino" msgstr "Filipiński" #: globals.py:89 msgid "Finnish" msgstr "Fiński" #: globals.py:90 msgid "French" msgstr "Francuski" #: globals.py:91 msgid "French (Canadian)" msgstr "Francuski (Kanadyjski)" #: globals.py:92 msgid "Galician" msgstr "Galicyjski" #: globals.py:93 msgid "German" msgstr "Niemiecki" #: globals.py:94 msgid "Greek" msgstr "Grecki" #: globals.py:95 msgid "Gujarati" msgstr "Gudżarati" #: globals.py:96 msgid "Hebrew" msgstr "Hebrajski" #: globals.py:97 msgid "Hindi" msgstr "Hindi" #: globals.py:98 msgid "Hungarian" msgstr "Węgierski" #: globals.py:99 msgid "Icelandic" msgstr "Islandzki" #: globals.py:100 msgid "Indonesian" msgstr "Indonezyjski" #: globals.py:101 msgid "Italian" msgstr "Włoski" #: globals.py:102 msgid "Japanese" msgstr "Japoński" #: globals.py:103 msgid "Kannada" msgstr "Kannada" #: globals.py:104 msgid "Korean" msgstr "Koreański" #: globals.py:105 msgid "Latvian" msgstr "Łotewski" #: globals.py:106 msgid "Lithuanian" msgstr "Litewski" #: globals.py:107 msgid "Malay" msgstr "Malajski" #: globals.py:108 msgid "Malayalam" msgstr "Malajalam" #: globals.py:109 msgid "Marathi" msgstr "Marathi" #: globals.py:110 msgid "Norwegian" msgstr "Norweski" #: globals.py:111 msgid "Persian" msgstr "Perski" #: globals.py:112 msgid "Polish" msgstr "Polski" #: globals.py:113 msgid "Portuguese (Brazil)" msgstr "Portugalski (Brazylijski)" #: globals.py:114 msgid "Portuguese (Portugal)" msgstr "Portugalski" #: globals.py:115 msgid "Romanian" msgstr "Rumuński" #: globals.py:116 msgid "Russian" msgstr "Rosyjski" #: globals.py:117 msgid "Serbian" msgstr "Serbski" #: globals.py:118 msgid "Slovak" msgstr "Słowacki" #: globals.py:119 msgid "Slovenian" msgstr "Słoweński" #: globals.py:120 msgid "Spanish" msgstr "Hiszpański" #: globals.py:121 msgid "Spanish (Latin America)" msgstr "Hiszpański (Latynoamerykański)" #: globals.py:122 msgid "Swahili" msgstr "Suahili" #: globals.py:123 msgid "Swedish" msgstr "Szwedzki" #: globals.py:124 msgid "Tamil" msgstr "Tamilski" #: globals.py:125 msgid "Telugu" msgstr "Telugu" #: globals.py:126 msgid "Thai" msgstr "Tajski" #: globals.py:127 msgid "Turkish" msgstr "Turecki" #: globals.py:128 msgid "Ukrainian" msgstr "Ukraiński" #: globals.py:129 msgid "Urdu" msgstr "Urdu" #: globals.py:130 msgid "Vietnamese" msgstr "Wietnamski" #: globals.py:131 msgid "Zulu" msgstr "Zulu" #: globals.py:139 msgid "best" msgstr "najlepszy" #: globals.py:140 msgid "recent" msgstr "ostatni" #: models.py:21 msgid "template" msgstr "szablon" #: models.py:23 msgid "item" msgstr "element" #: models.py:25 msgid "" "Number of Google Plus activities to return. From 1 to 100. Default is 10." msgstr "Ilość aktywności Google Plus do zwrócenia. Od 1 do 100. Domyślnie to 10." #: models.py:28 msgid "truncate chars" msgstr "obcinaj znaki" #: models.py:29 msgid "" "Truncates the content, annotation and attachment after a certain number of " "characters." msgstr "Obcina treści, adnotacji i załączniki po określonej liczbie znaków." #: models.py:32 msgid "Google+ User Id" msgstr "Id użytkownika Google+" #: models.py:33 msgid "The ID of the user to get activities for" msgstr "Identyfikator użytkownika dla którego pobierać aktywność" #: models.py:36 msgid "search query" msgstr "zapytanie" #: models.py:37 msgid "Full-text search query string." msgstr "Ciąg zapytania do wyszukiwania pełnotekstowego." #: models.py:39 msgid "preferred language" msgstr "preferowany język" #: models.py:41 msgid "Optional. Specify the preferred language to search with." msgstr "Opcjonalne. Określa preferowany język wyszukiwania." #: models.py:44 msgid "order by" msgstr "kolejność według" #: models.py:47 msgid "" "Optional. Specifies how to order search results. 'best': Sort activities by " "relevance to the user, most relevant first, 'recent': Sort activities by " "published date, most recent first." msgstr "Opcjonalne. Określa, jak uporządkować wyniki wyszukiwania. 'najlepsze': sortowanie działań przez odpowiedniość do użytkownika, najbardziej odpowiednie pierwsze, 'najnowsze': kolejność aktywności według daty publikacji, najnowsze na początku." #: models.py:52 msgid "Google API key" msgstr "Klucz Google API" #: models.py:53 msgid "" "To use the Google+ API, you must register your project on the Google " "Developers Console and get a Google API key." msgstr "Aby korzystać z interfejsu API Google+, musisz zarejestrować swój projekt na Konsoli Programistów Google i otrzymać klucz Google API." #: models.py:73 msgid "\"Google+ user id\" or \"Search query\" must be provided" msgstr "\"Id użytkownika Google+\" lub \"Zapytanie\" musi być podane" #: templates/cmsplugin_googleplus/twitter_bootstrap.html:14 msgid "Published" msgstr "Opublikowane" #: templates/cmsplugin_googleplus/twitter_bootstrap.html:55 #, python-format msgid "" "\n" " Originally shared by %(shared_by)s\n" " " msgstr "\nPierwotnie udostępnione przez %(shared_by)s\n " PK8fFHU  4cmsplugin_googleplus/locale/pl/LC_MESSAGES/django.moZT4 CQ aksz     ( B K S Z l              ( / 7 I>   I 8     ) 3 < VD           ( q( V   "+> ER[j/X:     '3H^ u  2  $1; m x        ( 3=AD M56=D ^ j wi     )JR[dk=rH;     R/LX8*H"-9N?=P(WZ. +<OI04U)D25; @CF 3A& $GS,VEKY#67JB'%M T:Q!>1 Originally shared by %(shared_by)s "Google+ user id" or "Search query" must be providedActivity ListActivity SearchAfrikaansAmharicArabicBasqueBengaliBulgarianCatalanChinese (Hong Kong)Chinese (Simplified)Chinese (Traditional)CroatianCzechDanishDutchEnglish (UK)English (US)EstonianExample Template using Twitter BootstrapFilipinoFinnishFrenchFrench (Canadian)Full-text search query string.GalicianGermanGoogle API keyGoogle Plus Activity FeedGoogle+ User IdGreekGujaratiHebrewHindiHungarianIcelandicIndonesianItalianJapaneseKannadaKoreanLatvianLayoutList of the activities in the specified collection for a particular user.LithuanianMalayMalayalamMarathiNorwegianNumber of Google Plus activities to return. From 1 to 100. Default is 10.Optional. Specifies how to order search results. 'best': Sort activities by relevance to the user, most relevant first, 'recent': Sort activities by published date, most recent first.Optional. Specify the preferred language to search with.PersianPolishPortuguese (Brazil)Portuguese (Portugal)PublishedRomanianRussianSearch public activities. These fields are ignored if the "Google+ User Id" is filled.SerbianSettingsSlovakSlovenianSpanishSpanish (Latin America)SwahiliSwedishTamilTeluguThaiThe ID of the user to get activities forTo use the Google+ API, you must register your project on the Google Developers Console and get a Google API key.Truncates the content, annotation and attachment after a certain number of characters.TurkishUkrainianUrduVietnameseZulubestitemorder bypreferred languagerecentsearch querytemplatetruncate charsProject-Id-Version: cmsplugin-googleplus Report-Msgid-Bugs-To: POT-Creation-Date: 2015-11-29 17:50+0100 PO-Revision-Date: 2016-01-30 17:02+0000 Last-Translator: Michał Fita Language-Team: Polish (http://www.transifex.com/itbabu/cmsplugin-googleplus/language/pl/) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: pl Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2); Pierwotnie udostępnione przez %(shared_by)s "Id użytkownika Google+" lub "Zapytanie" musi być podaneLista aktywnościSzukanie aktywnościAfrykanerskiAmharskiArabskiBaskijskiBengalskiBułgarskiKatalońskiChiński (Honk Kong)Chiński (Tradycyjny)Chiński (Uproszczony)ChorwackiCzeskiDuńskiHolenderskiAngielski (Brytyjski)Angielski (Amerykański)EstońskiPrzykładowy szablon używający Twitter BootstrapFilipińskiFińskiFrancuskiFrancuski (Kanadyjski)Ciąg zapytania do wyszukiwania pełnotekstowego.GalicyjskiNiemieckiKlucz Google APIKanał aktywności Google PlusId użytkownika Google+GreckiGudżaratiHebrajskiHindiWęgierskiIslandzkiIndonezyjskiWłoskiJapońskiKannadaKoreańskiŁotewskiUkładWykaz aktywności w określonej kolekcji dla danego użytkownika.LitewskiMalajskiMalajalamMarathiNorweskiIlość aktywności Google Plus do zwrócenia. Od 1 do 100. Domyślnie to 10.Opcjonalne. Określa, jak uporządkować wyniki wyszukiwania. 'najlepsze': sortowanie działań przez odpowiedniość do użytkownika, najbardziej odpowiednie pierwsze, 'najnowsze': kolejność aktywności według daty publikacji, najnowsze na początku.Opcjonalne. Określa preferowany język wyszukiwania.PerskiPolskiPortugalski (Brazylijski)PortugalskiOpublikowaneRumuńskiRosyjskiSzukaj publicznej aktywności. Te pola są ignorowane, jeśli wypełnione jest "Google+ id użytkownika".SerbskiUstawieniaSłowackiSłoweńskiHiszpańskiHiszpański (Latynoamerykański)SuahiliSzwedzkiTamilskiTeluguTajskiIdentyfikator użytkownika dla którego pobierać aktywnośćAby korzystać z interfejsu API Google+, musisz zarejestrować swój projekt na Konsoli Programistów Google i otrzymać klucz Google API.Obcina treści, adnotacji i załączniki po określonej liczbie znaków.TureckiUkraińskiUrduWietnamskiZulunajlepszyelementkolejność wedługpreferowany językostatnizapytanieszablonobcinaj znakiPKW}Gu<<4cmsplugin_googleplus/locale/en/LC_MESSAGES/django.po# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2015-11-29 17:50+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #: cms_plugins.py:19 msgid "Google Plus Activity Feed" msgstr "" #: cms_plugins.py:22 msgid "Settings" msgstr "" #: cms_plugins.py:25 msgid "Layout" msgstr "" #: cms_plugins.py:28 msgid "Activity List" msgstr "" #: cms_plugins.py:29 msgid "" "List of the activities in the specified collection for a particular user." msgstr "" #: cms_plugins.py:33 msgid "Activity Search" msgstr "" #: cms_plugins.py:34 msgid "" "Search public activities. These fields are ignored if the \"Google+ User Id" "\" is filled." msgstr "" #: conf.py:8 msgid "Example Template using Twitter Bootstrap" msgstr "" #: globals.py:71 msgid "Afrikaans" msgstr "" #: globals.py:72 msgid "Amharic" msgstr "" #: globals.py:73 msgid "Arabic" msgstr "" #: globals.py:74 msgid "Basque" msgstr "" #: globals.py:75 msgid "Bengali" msgstr "" #: globals.py:76 msgid "Bulgarian" msgstr "" #: globals.py:77 msgid "Catalan" msgstr "" #: globals.py:78 msgid "Chinese (Hong Kong)" msgstr "" #: globals.py:79 msgid "Chinese (Simplified)" msgstr "" #: globals.py:80 msgid "Chinese (Traditional)" msgstr "" #: globals.py:81 msgid "Croatian" msgstr "" #: globals.py:82 msgid "Czech" msgstr "" #: globals.py:83 msgid "Danish" msgstr "" #: globals.py:84 msgid "Dutch" msgstr "" #: globals.py:85 msgid "English (UK)" msgstr "" #: globals.py:86 msgid "English (US)" msgstr "" #: globals.py:87 msgid "Estonian" msgstr "" #: globals.py:88 msgid "Filipino" msgstr "" #: globals.py:89 msgid "Finnish" msgstr "" #: globals.py:90 msgid "French" msgstr "" #: globals.py:91 msgid "French (Canadian)" msgstr "" #: globals.py:92 msgid "Galician" msgstr "" #: globals.py:93 msgid "German" msgstr "" #: globals.py:94 msgid "Greek" msgstr "" #: globals.py:95 msgid "Gujarati" msgstr "" #: globals.py:96 msgid "Hebrew" msgstr "" #: globals.py:97 msgid "Hindi" msgstr "" #: globals.py:98 msgid "Hungarian" msgstr "" #: globals.py:99 msgid "Icelandic" msgstr "" #: globals.py:100 msgid "Indonesian" msgstr "" #: globals.py:101 msgid "Italian" msgstr "" #: globals.py:102 msgid "Japanese" msgstr "" #: globals.py:103 msgid "Kannada" msgstr "" #: globals.py:104 msgid "Korean" msgstr "" #: globals.py:105 msgid "Latvian" msgstr "" #: globals.py:106 msgid "Lithuanian" msgstr "" #: globals.py:107 msgid "Malay" msgstr "" #: globals.py:108 msgid "Malayalam" msgstr "" #: globals.py:109 msgid "Marathi" msgstr "" #: globals.py:110 msgid "Norwegian" msgstr "" #: globals.py:111 msgid "Persian" msgstr "" #: globals.py:112 msgid "Polish" msgstr "" #: globals.py:113 msgid "Portuguese (Brazil)" msgstr "" #: globals.py:114 msgid "Portuguese (Portugal)" msgstr "" #: globals.py:115 msgid "Romanian" msgstr "" #: globals.py:116 msgid "Russian" msgstr "" #: globals.py:117 msgid "Serbian" msgstr "" #: globals.py:118 msgid "Slovak" msgstr "" #: globals.py:119 msgid "Slovenian" msgstr "" #: globals.py:120 msgid "Spanish" msgstr "" #: globals.py:121 msgid "Spanish (Latin America)" msgstr "" #: globals.py:122 msgid "Swahili" msgstr "" #: globals.py:123 msgid "Swedish" msgstr "" #: globals.py:124 msgid "Tamil" msgstr "" #: globals.py:125 msgid "Telugu" msgstr "" #: globals.py:126 msgid "Thai" msgstr "" #: globals.py:127 msgid "Turkish" msgstr "" #: globals.py:128 msgid "Ukrainian" msgstr "" #: globals.py:129 msgid "Urdu" msgstr "" #: globals.py:130 msgid "Vietnamese" msgstr "" #: globals.py:131 msgid "Zulu" msgstr "" #: globals.py:139 msgid "best" msgstr "" #: globals.py:140 msgid "recent" msgstr "" #: models.py:21 msgid "template" msgstr "" #: models.py:23 msgid "item" msgstr "" #: models.py:25 msgid "" "Number of Google Plus activities to return. From 1 to 100. Default is 10." msgstr "" #: models.py:28 msgid "truncate chars" msgstr "" #: models.py:29 msgid "" "Truncates the content, annotation and attachment after a certain number of " "characters." msgstr "" #: models.py:32 msgid "Google+ User Id" msgstr "" #: models.py:33 msgid "The ID of the user to get activities for" msgstr "" #: models.py:36 msgid "search query" msgstr "" #: models.py:37 msgid "Full-text search query string." msgstr "" #: models.py:39 msgid "preferred language" msgstr "" #: models.py:41 msgid "Optional. Specify the preferred language to search with." msgstr "" #: models.py:44 msgid "order by" msgstr "" #: models.py:47 msgid "" "Optional. Specifies how to order search results. 'best': Sort activities by " "relevance to the user, most relevant first, 'recent': Sort activities by " "published date, most recent first." msgstr "" #: models.py:52 msgid "Google API key" msgstr "" #: models.py:53 msgid "" "To use the Google+ API, you must register your project on the Google " "Developers Console and get a Google API key." msgstr "" #: models.py:73 msgid "\"Google+ user id\" or \"Search query\" must be provided" msgstr "" #: templates/cmsplugin_googleplus/twitter_bootstrap.html:14 msgid "Published" msgstr "" #: templates/cmsplugin_googleplus/twitter_bootstrap.html:55 #, python-format msgid "" "\n" " Originally shared by %(shared_by)s\n" " " msgstr "" PK8fFH7 zz4cmsplugin_googleplus/locale/en/LC_MESSAGES/django.mo$,8@9Project-Id-Version: PACKAGE VERSION Report-Msgid-Bugs-To: POT-Creation-Date: 2015-11-29 17:50+0100 PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE Last-Translator: FULL NAME Language-Team: LANGUAGE Language: MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit PKBnG4cmsplugin_googleplus/locale/it/LC_MESSAGES/django.po# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # # Translators: # Marco Badan , 2013,2015 msgid "" msgstr "" "Project-Id-Version: cmsplugin-googleplus\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2015-11-29 17:50+0100\n" "PO-Revision-Date: 2015-12-07 13:49+0000\n" "Last-Translator: Marco Badan \n" "Language-Team: Italian (http://www.transifex.com/itbabu/cmsplugin-googleplus/language/it/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: it\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: cms_plugins.py:19 msgid "Google Plus Activity Feed" msgstr "Feed Attività di Google Plus" #: cms_plugins.py:22 msgid "Settings" msgstr "Configurazione" #: cms_plugins.py:25 msgid "Layout" msgstr "Layout" #: cms_plugins.py:28 msgid "Activity List" msgstr "Elenco Attività" #: cms_plugins.py:29 msgid "" "List of the activities in the specified collection for a particular user." msgstr "Elenca tutte le attività presenti nella raccolta specificata per un determinato utente." #: cms_plugins.py:33 msgid "Activity Search" msgstr "Ricerca Attività" #: cms_plugins.py:34 msgid "" "Search public activities. These fields are ignored if the \"Google+ User " "Id\" is filled." msgstr "Ricerca attività pubbliche. Questi campi vengono ignorati se viene inserito lo \"Google + User Id\"." #: conf.py:8 msgid "Example Template using Twitter Bootstrap" msgstr "Template di esempio con Twitter Bootstrap" #: globals.py:71 msgid "Afrikaans" msgstr "Afrikaans" #: globals.py:72 msgid "Amharic" msgstr "Amarico" #: globals.py:73 msgid "Arabic" msgstr "Arabo" #: globals.py:74 msgid "Basque" msgstr "Basco" #: globals.py:75 msgid "Bengali" msgstr "Bengali" #: globals.py:76 msgid "Bulgarian" msgstr "Bulgaro" #: globals.py:77 msgid "Catalan" msgstr "Catalano" #: globals.py:78 msgid "Chinese (Hong Kong)" msgstr "Cinese (Hong Kong)" #: globals.py:79 msgid "Chinese (Simplified)" msgstr "Cinese (semplificato)" #: globals.py:80 msgid "Chinese (Traditional)" msgstr "Cinese (tradizionale)" #: globals.py:81 msgid "Croatian" msgstr "Croato" #: globals.py:82 msgid "Czech" msgstr "Ceco" #: globals.py:83 msgid "Danish" msgstr "Danese" #: globals.py:84 msgid "Dutch" msgstr "Olandese" #: globals.py:85 msgid "English (UK)" msgstr "Inglese (UK)" #: globals.py:86 msgid "English (US)" msgstr "Inglese (US)" #: globals.py:87 msgid "Estonian" msgstr "Estone" #: globals.py:88 msgid "Filipino" msgstr "Filippino" #: globals.py:89 msgid "Finnish" msgstr "Finlandese" #: globals.py:90 msgid "French" msgstr "Francese" #: globals.py:91 msgid "French (Canadian)" msgstr "Francese (Canada)" #: globals.py:92 msgid "Galician" msgstr "Galiziano" #: globals.py:93 msgid "German" msgstr "Tedesco" #: globals.py:94 msgid "Greek" msgstr "Greco" #: globals.py:95 msgid "Gujarati" msgstr "Gujarati" #: globals.py:96 msgid "Hebrew" msgstr "Ebraico" #: globals.py:97 msgid "Hindi" msgstr "Hindi" #: globals.py:98 msgid "Hungarian" msgstr "Ungherese" #: globals.py:99 msgid "Icelandic" msgstr "Islandese" #: globals.py:100 msgid "Indonesian" msgstr "Indonesiano" #: globals.py:101 msgid "Italian" msgstr "Italiano" #: globals.py:102 msgid "Japanese" msgstr "Giapponese" #: globals.py:103 msgid "Kannada" msgstr "Kannada" #: globals.py:104 msgid "Korean" msgstr "Coreano" #: globals.py:105 msgid "Latvian" msgstr "Lettone" #: globals.py:106 msgid "Lithuanian" msgstr "Lituano" #: globals.py:107 msgid "Malay" msgstr "Malese" #: globals.py:108 msgid "Malayalam" msgstr "Malayalam" #: globals.py:109 msgid "Marathi" msgstr "Marathi" #: globals.py:110 msgid "Norwegian" msgstr "Norvegese" #: globals.py:111 msgid "Persian" msgstr "Farsi" #: globals.py:112 msgid "Polish" msgstr "Polacco" #: globals.py:113 msgid "Portuguese (Brazil)" msgstr "Portoghese (Brasile)" #: globals.py:114 msgid "Portuguese (Portugal)" msgstr "Portoghese (Portogallo)" #: globals.py:115 msgid "Romanian" msgstr "Rumeno" #: globals.py:116 msgid "Russian" msgstr "Russo" #: globals.py:117 msgid "Serbian" msgstr "Serbo" #: globals.py:118 msgid "Slovak" msgstr "Slovacco" #: globals.py:119 msgid "Slovenian" msgstr "Sloveno" #: globals.py:120 msgid "Spanish" msgstr "Spagnolo" #: globals.py:121 msgid "Spanish (Latin America)" msgstr "Spagnolo (America Latina)" #: globals.py:122 msgid "Swahili" msgstr "Swahili" #: globals.py:123 msgid "Swedish" msgstr "Svedese" #: globals.py:124 msgid "Tamil" msgstr "Tamil" #: globals.py:125 msgid "Telugu" msgstr "Telugu" #: globals.py:126 msgid "Thai" msgstr "Tailandese" #: globals.py:127 msgid "Turkish" msgstr "Turco" #: globals.py:128 msgid "Ukrainian" msgstr "Ucraino" #: globals.py:129 msgid "Urdu" msgstr "Urdu" #: globals.py:130 msgid "Vietnamese" msgstr "Vietnamita" #: globals.py:131 msgid "Zulu" msgstr "Zulù" #: globals.py:139 msgid "best" msgstr "più pertinente" #: globals.py:140 msgid "recent" msgstr "più recente" #: models.py:21 msgid "template" msgstr "template" #: models.py:23 msgid "item" msgstr "elemento" #: models.py:25 msgid "" "Number of Google Plus activities to return. From 1 to 100. Default is 10." msgstr "Numero di Attività di Google Plus da mostrare. Da 1 a 100. 10 è il valore predefinito ." #: models.py:28 msgid "truncate chars" msgstr "tronca caratteri" #: models.py:29 msgid "" "Truncates the content, annotation and attachment after a certain number of " "characters." msgstr "Tronca il contenuto, annotazione e allegato dopo un certo numero di caratteri." #: models.py:32 msgid "Google+ User Id" msgstr "Google+ User Id" #: models.py:33 msgid "The ID of the user to get activities for" msgstr "L'ID dell'utente per cui ottenere le attività." #: models.py:36 msgid "search query" msgstr "query di ricerca" #: models.py:37 msgid "Full-text search query string." msgstr "Stringa di testo completo della query di ricerca." #: models.py:39 msgid "preferred language" msgstr "lingua preferita" #: models.py:41 msgid "Optional. Specify the preferred language to search with." msgstr "Opzionale. Specifica la lingua preferita con cui fare la ricerca." #: models.py:44 msgid "order by" msgstr "ordina per" #: models.py:47 msgid "" "Optional. Specifies how to order search results. 'best': Sort activities by " "relevance to the user, most relevant first, 'recent': Sort activities by " "published date, most recent first." msgstr "Opzionale. Specifica come ordinare i risultati della ricerca. \"più pertinente\": ordina le attività in base alla pertinenza per l'utente, con la più pertinente per prima, \"più\": ordina le attività in base alla data di pubblicazione, con la più recente per prima." #: models.py:52 msgid "Google API key" msgstr "Google API key" #: models.py:53 msgid "" "To use the Google+ API, you must register your project on the Google " "Developers Console and get a Google API key." msgstr "Per utilizzare l'API di Google +, è necessario registrare il tuo progetto sulla Console per gli sviluppatori di Google e ottenere una Google API key." #: models.py:73 msgid "\"Google+ user id\" or \"Search query\" must be provided" msgstr "Deve essere fornito lo \"Google+ user id\" o la \"Query di ricerca\"" #: templates/cmsplugin_googleplus/twitter_bootstrap.html:14 msgid "Published" msgstr "Pubblicato" #: templates/cmsplugin_googleplus/twitter_bootstrap.html:55 #, python-format msgid "" "\n" " Originally shared by %(shared_by)s\n" " " msgstr "\nCondiviso inizialmente da %(shared_by)s" PK8fFH0!_ 4cmsplugin_googleplus/locale/it/LC_MESSAGES/django.moZT4 CQ aksz     ( B K S Z l              ( / 7 I>   I 8     ) 3 < VD           ( q( V   "+> ER[j(@G  !(-4 = JW)^  1  )9?HP V ` jv X   #Y- A "c( /-N! &17G P[ lyR/LX8*H"-9N?=P(WZ. +<OI04U)D25; @CF 3A& $GS,VEKY#67JB'%M T:Q!>1 Originally shared by %(shared_by)s "Google+ user id" or "Search query" must be providedActivity ListActivity SearchAfrikaansAmharicArabicBasqueBengaliBulgarianCatalanChinese (Hong Kong)Chinese (Simplified)Chinese (Traditional)CroatianCzechDanishDutchEnglish (UK)English (US)EstonianExample Template using Twitter BootstrapFilipinoFinnishFrenchFrench (Canadian)Full-text search query string.GalicianGermanGoogle API keyGoogle Plus Activity FeedGoogle+ User IdGreekGujaratiHebrewHindiHungarianIcelandicIndonesianItalianJapaneseKannadaKoreanLatvianLayoutList of the activities in the specified collection for a particular user.LithuanianMalayMalayalamMarathiNorwegianNumber of Google Plus activities to return. From 1 to 100. Default is 10.Optional. Specifies how to order search results. 'best': Sort activities by relevance to the user, most relevant first, 'recent': Sort activities by published date, most recent first.Optional. Specify the preferred language to search with.PersianPolishPortuguese (Brazil)Portuguese (Portugal)PublishedRomanianRussianSearch public activities. These fields are ignored if the "Google+ User Id" is filled.SerbianSettingsSlovakSlovenianSpanishSpanish (Latin America)SwahiliSwedishTamilTeluguThaiThe ID of the user to get activities forTo use the Google+ API, you must register your project on the Google Developers Console and get a Google API key.Truncates the content, annotation and attachment after a certain number of characters.TurkishUkrainianUrduVietnameseZulubestitemorder bypreferred languagerecentsearch querytemplatetruncate charsProject-Id-Version: cmsplugin-googleplus Report-Msgid-Bugs-To: POT-Creation-Date: 2015-11-29 17:50+0100 PO-Revision-Date: 2015-12-07 13:49+0000 Last-Translator: Marco Badan Language-Team: Italian (http://www.transifex.com/itbabu/cmsplugin-googleplus/language/it/) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: it Plural-Forms: nplurals=2; plural=(n != 1); Condiviso inizialmente da %(shared_by)sDeve essere fornito lo "Google+ user id" o la "Query di ricerca"Elenco AttivitàRicerca AttivitàAfrikaansAmaricoAraboBascoBengaliBulgaroCatalanoCinese (Hong Kong)Cinese (semplificato)Cinese (tradizionale)CroatoCecoDaneseOlandeseInglese (UK)Inglese (US)EstoneTemplate di esempio con Twitter BootstrapFilippinoFinlandeseFranceseFrancese (Canada)Stringa di testo completo della query di ricerca.GalizianoTedescoGoogle API keyFeed Attività di Google PlusGoogle+ User IdGrecoGujaratiEbraicoHindiUnghereseIslandeseIndonesianoItalianoGiapponeseKannadaCoreanoLettoneLayoutElenca tutte le attività presenti nella raccolta specificata per un determinato utente.LituanoMaleseMalayalamMarathiNorvegeseNumero di Attività di Google Plus da mostrare. Da 1 a 100. 10 è il valore predefinito .Opzionale. Specifica come ordinare i risultati della ricerca. "più pertinente": ordina le attività in base alla pertinenza per l'utente, con la più pertinente per prima, "più": ordina le attività in base alla data di pubblicazione, con la più recente per prima.Opzionale. Specifica la lingua preferita con cui fare la ricerca.FarsiPolaccoPortoghese (Brasile)Portoghese (Portogallo)PubblicatoRumenoRussoRicerca attività pubbliche. Questi campi vengono ignorati se viene inserito lo "Google + User Id".SerboConfigurazioneSlovaccoSlovenoSpagnoloSpagnolo (America Latina)SwahiliSvedeseTamilTeluguTailandeseL'ID dell'utente per cui ottenere le attività.Per utilizzare l'API di Google +, è necessario registrare il tuo progetto sulla Console per gli sviluppatori di Google e ottenere una Google API key.Tronca il contenuto, annotazione e allegato dopo un certo numero di caratteri.TurcoUcrainoUrduVietnamitaZulùpiù pertinenteelementoordina perlingua preferitapiù recentequery di ricercatemplatetronca caratteriPKڂG`88Jcmsplugin_googleplus/templates/cmsplugin_googleplus/twitter_bootstrap.html{% load sekizai_tags i18n humanize %}
{% for item in activity_list %}
{{ item.actor.displayName }} {% trans "Published" %} {{ item.published|naturaltime }}
{% if item.annotation %}

{{ item.annotation|safe|truncatechars_html:instance.truncate_chars }}

{% endif %} {% if item.object.content and item.verb != "share" %}
{{ item.object.content|safe|truncatechars_html:instance.truncate_chars }} {% endif %} {% if item.object.attachments %} {% for attachment in item.object.attachments %} {% if attachment.displayName == item.object.content %}

{{ attachment.displayName|truncatechars_html:"140" }}

{% else %}
{% endif %} {% if attachment.image.url %} {% elif attachment.thumbnails %} {% endif %} {% endfor %} {% endif %} {% if item.verb == "share" %}

{% blocktrans with shared_by=item.object.actor.displayName %} Originally shared by {{ shared_by }} {% endblocktrans %} {% if item.object.content %}
{{ item.object.content|safe|truncatechars_html:"140" }} {% endif %}

{% endif %}
plus one {% if item.object.plusoners.totalItems != 0 %}    {{ item.object.plusoners.totalItems}} {% endif %}
comment {% if item.object.replies.totalItems != 0 %}   {{ item.object.replies.totalItems }} {% endif %} share {% if item.object.resharers.totalItems != 0 %}   {{ item.object.resharers.totalItems }} {% endif %}
{% endfor %}
PKrGS= /cmsplugin_googleplus/migrations/0001_initial.py# -*- coding: utf-8 -*- from __future__ import unicode_literals from django.db import models, migrations import django.core.validators class Migration(migrations.Migration): dependencies = [ ('cms', '__first__'), ] operations = [ migrations.CreateModel( name='GooglePlusActivities', fields=[ ('cmsplugin_ptr', models.OneToOneField(parent_link=True, auto_created=True, primary_key=True, serialize=False, to='cms.CMSPlugin')), ('render_template', models.CharField(max_length=100, verbose_name='template', choices=[('cmsplugin_googleplus/twitter_bootstrap.html', 'Example Template using Twitter Bootstrap')])), ('items', models.SmallIntegerField(default=5, help_text='Number of Google Plus activities to return. From 1 to 100. Default is 10.', verbose_name='item', validators=[django.core.validators.MaxValueValidator(20), django.core.validators.MinValueValidator(1)])), ('truncate_chars', models.PositiveIntegerField(default=150, help_text='Truncates the content, annotation and attachment after a certain number of characters.', verbose_name='truncate chars')), ('google_user', models.CharField(help_text='The ID of the user to get activities for', max_length=75, verbose_name='Google+ User Id', blank=True)), ('query', models.CharField(help_text='Full-text search query string.', max_length=250, verbose_name='search query', blank=True)), ('preferred_language', models.CharField(blank=True, help_text='Optional. Specify the preferred language to search with.', max_length=10, verbose_name='preferred language', choices=[('af', 'Afrikaans'), ('am', 'Amharic'), ('ar', 'Arabic'), ('eu', 'Basque'), ('bn', 'Bengali'), ('bg', 'Bulgarian'), ('ca', 'Catalan'), ('zh-HK', 'Chinese (Hong Kong)'), ('zh-CN', 'Chinese (Simplified)'), ('zh-TW', 'Chinese (Traditional)'), ('hr', 'Croatian'), ('cs', 'Czech'), ('da', 'Danish'), ('nl', 'Dutch'), ('en-GB', 'English (UK)'), ('en-US', 'English (US)'), ('et', 'Estonian'), ('fil', 'Filipino'), ('fi', 'Finnish'), ('fr', 'French'), ('fr-CA', 'French (Canadian)'), ('gl', 'Galician'), ('de', 'German'), ('el', 'Greek'), ('gu', 'Gujarati'), ('iw', 'Hebrew'), ('hi', 'Hindi'), ('hu', 'Hungarian'), ('is', 'Icelandic'), ('id', 'Indonesian'), ('it', 'Italian'), ('ja', 'Japanese'), ('kn', 'Kannada'), ('ko', 'Korean'), ('lv', 'Latvian'), ('lt', 'Lithuanian'), ('ms', 'Malay'), ('ml', 'Malayalam'), ('mr', 'Marathi'), ('no', 'Norwegian'), ('fa', 'Persian'), ('pl', 'Polish'), ('pt-BR', 'Portuguese (Brazil)'), ('pt-PT', 'Portuguese (Portugal)'), ('ro', 'Romanian'), ('ru', 'Russian'), ('sr', 'Serbian'), ('sk', 'Slovak'), ('sl', 'Slovenian'), ('es', 'Spanish'), ('es-419', 'Spanish (Latin America)'), ('sw', 'Swahili'), ('sv', 'Swedish'), ('ta', 'Tamil'), ('te', 'Telugu'), ('th', 'Thai'), ('tr', 'Turkish'), ('uk', 'Ukrainian'), ('ur', 'Urdu'), ('vi', 'Vietnamese'), ('zu', 'Zulu')])), ('order_by', models.CharField(default='recent', help_text="Optional. Specifies how to order search results. 'best': Sort activities by relevance to the user, most relevant first, 'recent': Sort activities by published date, most recent first.", max_length=20, blank=True, choices=[('best', 'best'), ('recent', 'recent')])), ], options={ 'abstract': False, }, bases=('cms.cmsplugin',), ), ] PKrG+cmsplugin_googleplus/migrations/__init__.pyPK}GgXX:cmsplugin_googleplus/migrations/0002_add_google_api_key.py# -*- coding: utf-8 -*- from __future__ import unicode_literals from django.db import migrations, models class Migration(migrations.Migration): dependencies = [ ('cmsplugin_googleplus', '0001_initial'), ] operations = [ migrations.AddField( model_name='googleplusactivities', name='google_api_key', field=models.CharField(max_length=75, help_text='To use the Google+ API, you must register your project on the Google Developers Console and get a Google API key.', verbose_name='Google API key', default='invalid key'), preserve_default=False, ), migrations.AlterField( model_name='googleplusactivities', name='order_by', field=models.CharField(max_length=20, choices=[('best', 'best'), ('recent', 'recent')], verbose_name='order by', default='recent', blank=True, help_text="Optional. Specifies how to order search results. 'best': Sort activities by relevance to the user, most relevant first, 'recent': Sort activities by published date, most recent first."), ), ] PKIS}G&cmsplugin_googleplus/tests/__init__.pyPKS}G;X-cmsplugin_googleplus/tests/test_googleplus.pyfrom __future__ import unicode_literals from django.test import TestCase from django.test.utils import override_settings from googleapiclient.errors import HttpError from httplib2 import Response from mock import Mock, patch from ..globals import ITALIAN, RECENT from ..googleplus import GooglePlusAPI from .base import TEST_DEVELOPER_KEY, BaseGooglePlusTestCase __all__ = [ 'GooglePlusAPITestCase', 'GooglePlusAPITestCaseWithErrors' ] class GooglePlusAPITestCase(BaseGooglePlusTestCase): def test_google_plus_api_initialization(self): google_plus_api = GooglePlusAPI(TEST_DEVELOPER_KEY) self.assertIsNotNone(google_plus_api) self.assertIsInstance(google_plus_api, GooglePlusAPI) def test_user_activity_list_fetching(self): activity_list = self.google_plus_api.get_user_activity_list( user_id='test') self.assertEqual(len(activity_list), 20) self.assertEqual(activity_list[0]['actor']['displayName'], 'Google') def test_search_activity_list_fetching(self): activity_list = self.google_plus_api.get_search_activity_list( query='test', order_by=RECENT, preferred_language=ITALIAN) self.assertEqual(len(activity_list), 20) self.assertEqual(activity_list[0]['actor']['displayName'], 'Google') class GooglePlusAPITestCaseWithErrors(TestCase): error_content = b'{\n "error": {\n "errors": [\n {\n "domain": ' \ b'"usageLimits",\n"reason": "keyInvalid",\n ' \ b'"message": "Bad Request"\n }\n ],\n' \ b'"code": 400,\n "message": "Bad Request"\n }\n}\n' error_resp_dict = {'status': '400', 'x-xss-protection': '1; mode=block', 'x-content-type-options': 'nosniff', 'transfer-encoding': 'chunked', 'expires': 'Sun, 18 Aug 2013 07:25:24 GMT', 'server': 'GSE', 'cache-control': 'private, max-age=0', 'date': 'Sun, 18 Aug 2013 07:25:24 GMT', 'x-frame-options': 'SAMEORIGIN', 'content-type': 'application/json; charset=UTF-8'} def test_api_returns_unexpected_values(self): mock = Mock() mock.configure_mock(**{ "activities.return_value.list.return_value.execute.return_value": 'whoops', "activities.return_value.search.return_value.execute.return_value": 'whoops' }) with patch("cmsplugin_googleplus.googleplus.build", return_value=mock): google_plus_api = GooglePlusAPI(TEST_DEVELOPER_KEY) user_activity_list = google_plus_api.get_user_activity_list( user_id='test') self.assertEqual(user_activity_list, []) search_activity_list = google_plus_api.get_search_activity_list( query='test') self.assertEqual(search_activity_list, []) def test_api_fails_silenty_if_http_error_on_production(self): mock = Mock() mock.configure_mock(**{ "activities.return_value.list.return_value.execute.side_effect": HttpError( content=self.error_content, resp=Response(self.error_resp_dict)), "activities.return_value.search.return_value.execute.side_effect": HttpError( content=self.error_content, resp=Response(self.error_resp_dict)) }) with patch("cmsplugin_googleplus.googleplus.build", return_value=mock): google_plus_api = GooglePlusAPI(TEST_DEVELOPER_KEY) user_activity_list = google_plus_api.get_user_activity_list( user_id='test') self.assertEqual(user_activity_list, []) search_activity_list = google_plus_api.get_search_activity_list( query='test') self.assertEqual(search_activity_list, []) @override_settings(DEBUG=True) def test_api_fails_loudly_on_development(self): mock = Mock() mock.configure_mock(**{ "activities.return_value.list.return_value.execute.side_effect": HttpError( content=self.error_content, resp=Response(self.error_resp_dict)), "activities.return_value.search.return_value.execute.side_effect": HttpError( content=self.error_content, resp=Response(self.error_resp_dict)) }) with patch("cmsplugin_googleplus.googleplus.build", return_value=mock): google_plus_api = GooglePlusAPI(TEST_DEVELOPER_KEY) self.assertRaises(HttpError, google_plus_api.get_user_activity_list, {'user_id': 'test'}) self.assertRaises(HttpError, google_plus_api.get_search_activity_list, {'query': 'test'}) PKT}G'.cmsplugin_googleplus/tests/test_cms_plugins.pyfrom __future__ import unicode_literals from cms.api import add_plugin, create_page from cms.models import CMSPlugin from ..conf import DEFAULT_PLUGIN_TEMPLATES from .base import BaseGooglePlusTestCase __all__ = [ 'GooglePlusPluginTestCase', ] class GooglePlusPluginTestCase(BaseGooglePlusTestCase): def setUp(self): super(GooglePlusPluginTestCase, self).setUp() self.page = create_page("render test", "nav_playground.html", "en") self.ph = self.page.placeholders.get(slot="body") def test_plugin_user_activity_list(self): self.assertEqual(CMSPlugin.objects.all().count(), 0) add_plugin( self.ph, "GooglePlusActivitiesPlugin", "en", google_user="test", render_template=DEFAULT_PLUGIN_TEMPLATES[0][0]) self.page.publish(language="en") self.assertEqual(CMSPlugin.objects.filter( placeholder__page__publisher_is_draft=False).count(), 1) response = self.client.get(self.page.get_absolute_url()) self.assertEquals(response.status_code, 200) self.assertEqual(len(response.context['activity_list']), 20) def test_plugin_search_activity_list(self): self.assertEqual(CMSPlugin.objects.all().count(), 0) add_plugin( self.ph, "GooglePlusActivitiesPlugin", "en", query="test", render_template=DEFAULT_PLUGIN_TEMPLATES[0][0]) self.page.publish(language='en') self.assertEqual(CMSPlugin.objects.filter( placeholder__page__publisher_is_draft=False).count(), 1) response = self.client.get(self.page.get_absolute_url()) self.assertEquals(response.status_code, 200) self.assertEqual(len(response.context['activity_list']), 20) PKnR}GX )cmsplugin_googleplus/tests/test_models.pyfrom __future__ import unicode_literals from django.core.exceptions import ValidationError from django.test import TestCase from ..models import GooglePlusActivities __all__ = [ 'GooglePlusActivitiesTestCase' ] class GooglePlusActivitiesTestCase(TestCase): def test_user_or_search(self): """Test a validator: you must enter a query or a google+ user id.""" google_plus_activities = GooglePlusActivities() self.assertRaises(ValidationError, google_plus_activities.clean) google_plus_activities.query = 'test' google_plus_activities.clean() google_plus_activities.query = None google_plus_activities.google_user = 'test_user' google_plus_activities.clean() def test_unicode(self): google_plus_activities = GooglePlusActivities(query='test') google_plus_activities.__unicode__() google_plus_activities.query = None google_plus_activities.google_user = 'test_user' google_plus_activities.__unicode__() PKT}G_ "cmsplugin_googleplus/tests/base.pyfrom __future__ import unicode_literals import json import os from django.test import TestCase from mock import Mock, patch from ..googleplus import GooglePlusAPI TEST_DEVELOPER_KEY = '123' DATA_DIR = os.path.join(os.path.dirname(__file__), 'data') def data_from_file(filename): path = os.path.join(DATA_DIR, filename) f = open(path, 'r') data = f.read() f.close() return json.loads(data) class BaseGooglePlusTestCase(TestCase): def setUp(self): super(BaseGooglePlusTestCase, self).setUp() # TODO: improve this. apiclient.http.HttpMock should be used as # argument in apiclient.http.HttpRequest.execute. mock = Mock() mock.configure_mock(**{ "activities.return_value.list.return_value.execute.return_value": data_from_file('activities.json'), "activities.return_value.search.return_value.execute.return_value": data_from_file('activities.json') }) self.patcher = patch( "cmsplugin_googleplus.googleplus.build", return_value=mock) self.patcher.start() self.google_plus_api = GooglePlusAPI(TEST_DEVELOPER_KEY) def tearDown(self): self.patcher.stop() PKrG , ,/cmsplugin_googleplus/tests/data/activities.json{ "kind": "plus#activityFeed", "etag": "\"aMoGitCCK7ZwjEjUM2ewtDjZJuk/cuDnULJwlqFwGLwMNTK6I5GXZJg\"", "nextPageToken": "CAIQ-KzmwuvpuAIgFCgB", "title": "Google+ List of Activities for Collection PUBLIC", "updated": "2013-08-15T19:17:15.695Z", "items": [ { "kind": "plus#activity", "etag": "\"aMoGitCCK7ZwjEjUM2ewtDjZJuk/zOeN9mvuAFtDe0eW1pJ271F9PSY\"", "title": "Happy birthday to E. (Edith) Nesbit, author of dozens of beloved books for children including \"The Railway...", "published": "2013-08-15T19:17:15.695Z", "updated": "2013-08-15T19:17:15.695Z", "id": "z13px5mj5rynhfxyv04cdp3jxuf5cz2a3e4", "url": "https://plus.google.com/116899029375914044550/posts/dneMKewo9AJ", "actor": { "id": "116899029375914044550", "displayName": "Google", "url": "https://plus.google.com/116899029375914044550", "image": { "url": "https://lh4.googleusercontent.com/-v0soe-ievYE/AAAAAAAAAAI/AAAAAAABSw4/mVgTJbt4qek/photo.jpg?sz=50" } }, "verb": "post", "object": { "objectType": "note", "content": "Happy birthday to E. (Edith) Nesbit, author of dozens of beloved books for children including "The Railway Children," which was the inspiration for our doodle in the U.K. today.", "url": "https://plus.google.com/116899029375914044550/posts/dneMKewo9AJ", "replies": { "totalItems": 14, "selfLink": "https://www.googleapis.com/plus/v1/activities/z13px5mj5rynhfxyv04cdp3jxuf5cz2a3e4/comments" }, "plusoners": { "totalItems": 215, "selfLink": "https://www.googleapis.com/plus/v1/activities/z13px5mj5rynhfxyv04cdp3jxuf5cz2a3e4/people/plusoners" }, "resharers": { "totalItems": 13, "selfLink": "https://www.googleapis.com/plus/v1/activities/z13px5mj5rynhfxyv04cdp3jxuf5cz2a3e4/people/resharers" }, "attachments": [ { "objectType": "photo", "displayName": "This logo was created as a refresh of the original Google logo. It was a collaboration between the designers Jon Wiley and Micheal Lopez. Valuable feedback was provided by Jamie Divine, Susan Shepard, Margaret Stewart, Michael Leggett, and Nundu Janakiram.", "id": "116899029375914044550.5912426612562051986", "content": "", "url": "https://plus.google.com/photos/116899029375914044550/albums/5912426607788953393/5912426612562051986?authkey=CPOVgrmGsrfTAg", "image": { "url": "https://lh6.googleusercontent.com/-orQArix2kIc/Ug0orcJTw5I/AAAAAAABTeQ/lzx21v1F9r4/w506-h750/nesbit13-hr.jpg", "type": "image/jpeg", "height": 750, "width": 506 }, "fullImage": { "url": "https://lh6.googleusercontent.com/-orQArix2kIc/Ug0orcJTw5I/AAAAAAABTeQ/lzx21v1F9r4/nesbit13-hr.jpg", "type": "image/jpeg", "height": 1186, "width": 2653 } } ] }, "provider": { "title": "Google+" }, "access": { "kind": "plus#acl", "description": "Public", "items": [ { "type": "public" } ] } }, { "kind": "plus#activity", "etag": "\"aMoGitCCK7ZwjEjUM2ewtDjZJuk/gUKJawS-cd-vYXU2rC5fmpJa9nM\"", "title": "We’re partnering with the U.K. charity Comic Relief to bring you the first online comedy club—the “Hangout...", "published": "2013-08-15T18:20:27.154Z", "updated": "2013-08-15T18:20:27.154Z", "id": "z12wunmqquepwdquc22hcvzimtebslkul", "url": "https://plus.google.com/116899029375914044550/posts/DARoauMwFrx", "actor": { "id": "116899029375914044550", "displayName": "Google", "url": "https://plus.google.com/116899029375914044550", "image": { "url": "https://lh4.googleusercontent.com/-v0soe-ievYE/AAAAAAAAAAI/AAAAAAABSw4/mVgTJbt4qek/photo.jpg?sz=50" } }, "verb": "post", "object": { "objectType": "note", "content": "We’re partnering with the U.K. charity Comic Relief to bring you the first online comedy club—the “Hangout Comedy Club.” Join a Google+ Hangout hosted by one of our famous comedians, including Katherine Ryan, Sanderson Jones and Joey Page. You can sit in the front row—the better to heckle!—or watch from the back. While you watch, a clever gizmo called the “Laughometer” will measure how much you enjoy the show and turn your lol’s into an optional donation to Comic Relief.

The next Hangout is today, Aug 15 at 10pm BST with Sanderson Jones. Find out who else is starring and get your free seat at www.youtube.com/user/rednoseday/hangoutcomedyclub. ", "url": "https://plus.google.com/116899029375914044550/posts/DARoauMwFrx", "replies": { "totalItems": 11, "selfLink": "https://www.googleapis.com/plus/v1/activities/z12wunmqquepwdquc22hcvzimtebslkul/comments" }, "plusoners": { "totalItems": 154, "selfLink": "https://www.googleapis.com/plus/v1/activities/z12wunmqquepwdquc22hcvzimtebslkul/people/plusoners" }, "resharers": { "totalItems": 21, "selfLink": "https://www.googleapis.com/plus/v1/activities/z12wunmqquepwdquc22hcvzimtebslkul/people/resharers" }, "attachments": [ { "objectType": "video", "displayName": "Comic Relief presents Hangout Comedy Club", "content": "Hangout Comedy Club - Where your laugh could help change a life! Get a free seat! http://youtube.com/user/rednoseday/hangoutcomedyclub Comic Relief brings so...", "url": "http://www.youtube.com/watch?v=2wPWGPNRD0w", "image": { "url": "https://lh3.googleusercontent.com/proxy/wgNKqcg0FYUHGk193aIPa2NV8R9fCYktAo5Bk02oCunQITvN0zyubqxnNpqg66Dn495dc3u3z-LJi-DMmod3t0u_Q6nCGhbckI75D_-0QQ=w506-h284-n", "type": "image/jpeg", "height": 284, "width": 506 }, "embed": { "url": "http://www.youtube.com/v/2wPWGPNRD0w?version=3&autohide=1", "type": "application/x-shockwave-flash" } } ] }, "provider": { "title": "Google+" }, "access": { "kind": "plus#acl", "description": "Public", "items": [ { "type": "public" } ] } }, { "kind": "plus#activity", "etag": "\"aMoGitCCK7ZwjEjUM2ewtDjZJuk/A6d98Uv0lglK4VcYCEmHKluYYV0\"", "title": "We've carved out a tribute to Croatian sculptor Ivan Meštrović, born 130 years ago today. ", "published": "2013-08-15T16:54:13.108Z", "updated": "2013-08-15T16:54:13.108Z", "id": "z12isrqyrvisffysz22hcvzimtebslkul", "url": "https://plus.google.com/116899029375914044550/posts/6M6Ny9Vu3Nt", "actor": { "id": "116899029375914044550", "displayName": "Google", "url": "https://plus.google.com/116899029375914044550", "image": { "url": "https://lh4.googleusercontent.com/-v0soe-ievYE/AAAAAAAAAAI/AAAAAAABSw4/mVgTJbt4qek/photo.jpg?sz=50" } }, "verb": "post", "object": { "objectType": "note", "content": "We've carved out a tribute to Croatian sculptor Ivan Meštrović, born 130 years ago today. ", "url": "https://plus.google.com/116899029375914044550/posts/6M6Ny9Vu3Nt", "replies": { "totalItems": 16, "selfLink": "https://www.googleapis.com/plus/v1/activities/z12isrqyrvisffysz22hcvzimtebslkul/comments" }, "plusoners": { "totalItems": 370, "selfLink": "https://www.googleapis.com/plus/v1/activities/z12isrqyrvisffysz22hcvzimtebslkul/people/plusoners" }, "resharers": { "totalItems": 32, "selfLink": "https://www.googleapis.com/plus/v1/activities/z12isrqyrvisffysz22hcvzimtebslkul/people/resharers" }, "attachments": [ { "objectType": "photo", "id": "116899029375914044550.5912389715066070290", "content": "", "url": "https://plus.google.com/photos/116899029375914044550/albums/5912389715034589137/5912389715066070290?authkey=CPq7wpzx1K3RtwE", "image": { "url": "https://lh4.googleusercontent.com/-3FpVq5ukIv8/Ug0HHuQvpRI/AAAAAAABTcI/FIdRpj-7Obw/w506-h750/ivan-hires.png", "type": "image/jpeg", "height": 750, "width": 506 }, "fullImage": { "url": "https://lh4.googleusercontent.com/-3FpVq5ukIv8/Ug0HHuQvpRI/AAAAAAABTcI/FIdRpj-7Obw/ivan-hires.png", "type": "image/jpeg", "height": 828, "width": 2100 } } ] }, "provider": { "title": "Google+" }, "access": { "kind": "plus#acl", "description": "Public", "items": [ { "type": "public" } ] } }, { "kind": "plus#activity", "etag": "\"aMoGitCCK7ZwjEjUM2ewtDjZJuk/YvVg2_GUtC3uMzSi7gTUTi4bkyY\"", "title": "We've updated our Indian Independence Day doodle on google.co.in and below (you can also see it at http...", "published": "2013-08-15T15:11:49.965Z", "updated": "2013-08-15T15:11:49.965Z", "id": "z124fdyjksnpshnxz04cdp3jxuf5cz2a3e4", "url": "https://plus.google.com/116899029375914044550/posts/Z3vzCvuYozo", "actor": { "id": "116899029375914044550", "displayName": "Google", "url": "https://plus.google.com/116899029375914044550", "image": { "url": "https://lh4.googleusercontent.com/-v0soe-ievYE/AAAAAAAAAAI/AAAAAAABSw4/mVgTJbt4qek/photo.jpg?sz=50" } }, "verb": "post", "object": { "objectType": "note", "content": "We've updated our Indian Independence Day doodle on google.co.in and below (you can also see it at http://g.co/4jah). ", "url": "https://plus.google.com/116899029375914044550/posts/Z3vzCvuYozo", "replies": { "totalItems": 26, "selfLink": "https://www.googleapis.com/plus/v1/activities/z124fdyjksnpshnxz04cdp3jxuf5cz2a3e4/comments" }, "plusoners": { "totalItems": 519, "selfLink": "https://www.googleapis.com/plus/v1/activities/z124fdyjksnpshnxz04cdp3jxuf5cz2a3e4/people/plusoners" }, "resharers": { "totalItems": 38, "selfLink": "https://www.googleapis.com/plus/v1/activities/z124fdyjksnpshnxz04cdp3jxuf5cz2a3e4/people/resharers" }, "attachments": [ { "objectType": "photo", "id": "116899029375914044550.5912363448570477106", "content": "", "url": "https://plus.google.com/photos/116899029375914044550/albums/5912363444119011489/5912363448570477106?authkey=CLWy6q-G8-Cd6wE", "image": { "url": "https://lh3.googleusercontent.com/-gB8R1RSge1s/UgzvOz8L-jI/AAAAAAABTZ4/YqJ2GvoxeAE/w506-h750/india13-hp.jpg", "type": "image/jpeg", "height": 750, "width": 506 }, "fullImage": { "url": "https://lh3.googleusercontent.com/-gB8R1RSge1s/UgzvOz8L-jI/AAAAAAABTZ4/YqJ2GvoxeAE/india13-hp.jpg", "type": "image/jpeg", "height": 210, "width": 589 } } ] }, "provider": { "title": "Google+" }, "access": { "kind": "plus#acl", "description": "Public", "items": [ { "type": "public" } ] } }, { "kind": "plus#activity", "etag": "\"aMoGitCCK7ZwjEjUM2ewtDjZJuk/ZzOqXRYFbIqxlH0Cg4MitUnpbTk\"", "title": "Wishing a happy Gwangbokjeol (Liberation Day) to South Korea! ", "published": "2013-08-15T00:04:25.612Z", "updated": "2013-08-15T00:20:21.000Z", "id": "z12nvn3atrv1g3yfo22hcvzimtebslkul", "url": "https://plus.google.com/116899029375914044550/posts/LZZBQfx8qSv", "actor": { "id": "116899029375914044550", "displayName": "Google", "url": "https://plus.google.com/116899029375914044550", "image": { "url": "https://lh4.googleusercontent.com/-v0soe-ievYE/AAAAAAAAAAI/AAAAAAABSw4/mVgTJbt4qek/photo.jpg?sz=50" } }, "verb": "post", "object": { "objectType": "note", "content": "Wishing a happy Gwangbokjeol (Liberation Day) to South Korea! ", "url": "https://plus.google.com/116899029375914044550/posts/LZZBQfx8qSv", "replies": { "totalItems": 42, "selfLink": "https://www.googleapis.com/plus/v1/activities/z12nvn3atrv1g3yfo22hcvzimtebslkul/comments" }, "plusoners": { "totalItems": 1055, "selfLink": "https://www.googleapis.com/plus/v1/activities/z12nvn3atrv1g3yfo22hcvzimtebslkul/people/plusoners" }, "resharers": { "totalItems": 103, "selfLink": "https://www.googleapis.com/plus/v1/activities/z12nvn3atrv1g3yfo22hcvzimtebslkul/people/resharers" }, "attachments": [ { "objectType": "photo", "id": "116899029375914044550.5912129427297721090", "content": "", "url": "https://plus.google.com/photos/116899029375914044550/albums/5912129424756688097/5912129427297721090?authkey=CJrJ5bbBrLSW6gE", "image": { "url": "https://lh6.googleusercontent.com/-rQJjCSnWcf4/UgwaY-w22wI/AAAAAAABTM4/KIDrmq6LS5s/w506-h750/korealib13_hires.jpg", "type": "image/jpeg", "height": 750, "width": 506 }, "fullImage": { "url": "https://lh6.googleusercontent.com/-rQJjCSnWcf4/UgwaY-w22wI/AAAAAAABTM4/KIDrmq6LS5s/korealib13_hires.jpg", "type": "image/jpeg", "height": 1167, "width": 2695 } } ] }, "provider": { "title": "Google+" }, "access": { "kind": "plus#acl", "description": "Public", "items": [ { "type": "public" } ] } }, { "kind": "plus#activity", "etag": "\"aMoGitCCK7ZwjEjUM2ewtDjZJuk/qZgkBRdXojXvE54b0cUDsuskzsA\"", "title": "Whether you’re outlining a thesis or piecing together notes from a meeting, you rely on certain tools...", "published": "2013-08-14T22:14:19.354Z", "updated": "2013-08-14T22:14:19.354Z", "id": "z120tb44olvui3xkt22hcvzimtebslkul", "url": "https://plus.google.com/116899029375914044550/posts/5LXtmiQTA88", "actor": { "id": "116899029375914044550", "displayName": "Google", "url": "https://plus.google.com/116899029375914044550", "image": { "url": "https://lh4.googleusercontent.com/-v0soe-ievYE/AAAAAAAAAAI/AAAAAAABSw4/mVgTJbt4qek/photo.jpg?sz=50" } }, "verb": "share", "object": { "objectType": "activity", "id": "z12tsjdhuoiqev1iw04cj5tjsx3sgtvhltc0k", "actor": { "id": "112893701314508522131", "displayName": "Google Drive", "url": "https://plus.google.com/112893701314508522131", "image": { "url": "https://lh3.googleusercontent.com/-SWOcB8HK24k/AAAAAAAAAAI/AAAAAAAAHsU/nLqgO23Q93M/photo.jpg?sz=50" } }, "content": "Whether you’re outlining a thesis or piecing together notes from a meeting, you rely on certain tools to keep your work clean and organized. To make that even easier, today we’re rolling out two nifty improvements you’ve been asking for: updated spell check and more customized lists.

The updated spell check lets you check the spelling of your entire document or presentation at once, instead of having to resolve misspellings individually. See it in action now by clicking on “Tools” then select “Spelling.”

And for those who love structure, we’ve added new presets for numbered and bulleted lists. You can change the color, size, and style of individual bullets, or even customize your own -- whatever you prefer!", "url": "https://plus.google.com/112893701314508522131/posts/dogXC55rEjt", "replies": { "totalItems": 26, "selfLink": "https://www.googleapis.com/plus/v1/activities/z120tb44olvui3xkt22hcvzimtebslkul/comments" }, "plusoners": { "totalItems": 554, "selfLink": "https://www.googleapis.com/plus/v1/activities/z120tb44olvui3xkt22hcvzimtebslkul/people/plusoners" }, "resharers": { "totalItems": 76, "selfLink": "https://www.googleapis.com/plus/v1/activities/z120tb44olvui3xkt22hcvzimtebslkul/people/resharers" }, "attachments": [ { "objectType": "photo", "id": "112893701314508522131.5911313259004177874", "content": "", "url": "https://plus.google.com/photos/112893701314508522131/albums/5911313256514799425/5911313259004177874?authkey=CPqC77W0idXEfA", "image": { "url": "https://lh3.googleusercontent.com/-hLflUasExRg/Ugk0Fu8ALdI/AAAAAAAAHw8/JqaTQYzGyTk/w506-h750/bullets.gif", "type": "image/jpeg", "height": 750, "width": 506 }, "fullImage": { "url": "https://lh3.googleusercontent.com/-hLflUasExRg/Ugk0Fu8ALdI/AAAAAAAAHw8/JqaTQYzGyTk/bullets.gif", "type": "image/jpeg", "height": 268, "width": 328 } } ] }, "annotation": "Earlier this week we updated +Google Drive to give you the ability to change the color, size and style of bulleted and numbered lists, and added better spell check that lets you review your entire document at once. Go on and get your docs in order!

#gonegoogle ", "provider": { "title": "Reshared Post" }, "access": { "kind": "plus#acl", "description": "Public", "items": [ { "type": "public" } ] } }, { "kind": "plus#activity", "etag": "\"aMoGitCCK7ZwjEjUM2ewtDjZJuk/cfpF5nVfZtCzVkr94BGwWOMtkKc\"", "title": "Happy Independence Day to Pakistan! Our doodle Wednesday features the markhor, a striking species of...", "published": "2013-08-14T17:10:27.145Z", "updated": "2013-08-14T17:10:27.145Z", "id": "z12bdbaq3lnfzl11h22hcvzimtebslkul", "url": "https://plus.google.com/116899029375914044550/posts/8XvzrQb3TwT", "actor": { "id": "116899029375914044550", "displayName": "Google", "url": "https://plus.google.com/116899029375914044550", "image": { "url": "https://lh4.googleusercontent.com/-v0soe-ievYE/AAAAAAAAAAI/AAAAAAABSw4/mVgTJbt4qek/photo.jpg?sz=50" } }, "verb": "post", "object": { "objectType": "note", "content": "Happy Independence Day to Pakistan! Our doodle Wednesday features the markhor, a striking species of wild goat which is Pakistan's national animal. ", "url": "https://plus.google.com/116899029375914044550/posts/8XvzrQb3TwT", "replies": { "totalItems": 51, "selfLink": "https://www.googleapis.com/plus/v1/activities/z12bdbaq3lnfzl11h22hcvzimtebslkul/comments" }, "plusoners": { "totalItems": 677, "selfLink": "https://www.googleapis.com/plus/v1/activities/z12bdbaq3lnfzl11h22hcvzimtebslkul/people/plusoners" }, "resharers": { "totalItems": 67, "selfLink": "https://www.googleapis.com/plus/v1/activities/z12bdbaq3lnfzl11h22hcvzimtebslkul/people/resharers" }, "attachments": [ { "objectType": "photo", "id": "116899029375914044550.5912022924477030562", "content": "", "url": "https://plus.google.com/photos/116899029375914044550/albums/5912022917893787569/5912022924477030562?authkey=COuL6MSHl_7lzAE", "image": { "url": "https://lh4.googleusercontent.com/-17X9V3q3sRY/Ugu5hs1rYKI/AAAAAAABTIc/ROYWP_jXYJo/w506-h750/Pak-Ind-final-hiRes.jpg", "type": "image/jpeg", "height": 750, "width": 506 }, "fullImage": { "url": "https://lh4.googleusercontent.com/-17X9V3q3sRY/Ugu5hs1rYKI/AAAAAAABTIc/ROYWP_jXYJo/Pak-Ind-final-hiRes.jpg", "type": "image/jpeg", "height": 1221, "width": 2576 } } ] }, "provider": { "title": "Google+" }, "access": { "kind": "plus#acl", "description": "Public", "items": [ { "type": "public" } ] } }, { "kind": "plus#activity", "etag": "\"aMoGitCCK7ZwjEjUM2ewtDjZJuk/OADw6l6fuwsXPYEz_lFpw-6k3Sg\"", "title": "The next time you're planning a day trip, use Google Voice Search to start exploring your options. Say...", "published": "2013-08-13T22:45:02.450Z", "updated": "2013-08-13T22:45:02.450Z", "id": "z13pxbdgfluqc5xvv22hcvzimtebslkul", "url": "https://plus.google.com/116899029375914044550/posts/MjGvkJRCdtv", "actor": { "id": "116899029375914044550", "displayName": "Google", "url": "https://plus.google.com/116899029375914044550", "image": { "url": "https://lh4.googleusercontent.com/-v0soe-ievYE/AAAAAAAAAAI/AAAAAAABSw4/mVgTJbt4qek/photo.jpg?sz=50" } }, "verb": "post", "object": { "objectType": "note", "content": "The next time you're planning a day trip, use Google Voice Search to start exploring your options. Say that you're located in New York City and want to escape the city for a day. Tap the microphone on your Google Search App and ask, "How far is Philadelphia?" You'll hear the answer spoken back to you—in this case, a quick drive of 1 hour and 42 minutes. Don't want to drive? Click the turn sign and select the public transit option to explore your options.

With your destination and mode of transportation decided, it's time to start planning! Start by saying "Show me things to do in Philadelphia" and you can scroll through points of interest. To learn more about any of them, tap the attraction—say, The Philadelphia Zoo—and the search results will show you more details like notable animals, upcoming events and exhibits.

#searchtips #googlesearch ", "url": "https://plus.google.com/116899029375914044550/posts/MjGvkJRCdtv", "replies": { "totalItems": 29, "selfLink": "https://www.googleapis.com/plus/v1/activities/z13pxbdgfluqc5xvv22hcvzimtebslkul/comments" }, "plusoners": { "totalItems": 651, "selfLink": "https://www.googleapis.com/plus/v1/activities/z13pxbdgfluqc5xvv22hcvzimtebslkul/people/plusoners" }, "resharers": { "totalItems": 83, "selfLink": "https://www.googleapis.com/plus/v1/activities/z13pxbdgfluqc5xvv22hcvzimtebslkul/people/resharers" }, "attachments": [ { "objectType": "album", "displayName": "2013-08-13", "id": "116899029375914044550.5911738132324497265", "url": "https://plus.sandbox.google.com/photos/116899029375914044550/albums/5911738132324497265?authkey=COD4oY385vrEfg", "thumbnails": [ { "url": "https://plus.sandbox.google.com/photos/116899029375914044550/albums/5911738132324497265/5911738534746341554?authkey=COD4oY385vrEfg", "description": "", "image": { "url": "https://lh3.googleusercontent.com/-Qv_aZlndrAg/Ugq24CiLQLI/AAAAAAABTFI/ZUKNpSjeH5w/w253-h253-p/philly.png", "type": "image/jpeg", "height": 253, "width": 253 } }, { "url": "https://plus.sandbox.google.com/photos/116899029375914044550/albums/5911738132324497265/5911738135761554402?authkey=COD4oY385vrEfg", "description": "", "image": { "url": "https://lh6.googleusercontent.com/-dMAR0FDxMqs/Ugq2g0Myi-I/AAAAAAABTDU/2q4fo5kyA3U/w253-h253-p/newyork.png", "type": "image/jpeg", "height": 253, "width": 253 } } ] } ] }, "provider": { "title": "Google+" }, "access": { "kind": "plus#acl", "description": "Public", "items": [ { "type": "public" } ] } }, { "kind": "plus#activity", "etag": "\"aMoGitCCK7ZwjEjUM2ewtDjZJuk/BR7o7FKeu9XFv8rPvumQ0VaslxM\"", "title": "In the past three years, we've rewarded (and fixed!) 2,000+ security bug reports and paid out more than...", "published": "2013-08-12T21:13:13.389Z", "updated": "2013-08-12T21:13:13.389Z", "id": "z135v1tiupnatjxem22hcvzimtebslkul", "url": "https://plus.google.com/116899029375914044550/posts/EsPHbqZs2NN", "actor": { "id": "116899029375914044550", "displayName": "Google", "url": "https://plus.google.com/116899029375914044550", "image": { "url": "https://lh4.googleusercontent.com/-v0soe-ievYE/AAAAAAAAAAI/AAAAAAABSw4/mVgTJbt4qek/photo.jpg?sz=50" } }, "verb": "post", "object": { "objectType": "note", "content": "In the past three years, we've rewarded (and fixed!) 2,000+ security bug reports and paid out more than $2 million to security researchers who have helped make the web safer for hundreds of millions of users around the world. A big thank you to the security community!", "url": "https://plus.google.com/116899029375914044550/posts/EsPHbqZs2NN", "replies": { "totalItems": 39, "selfLink": "https://www.googleapis.com/plus/v1/activities/z135v1tiupnatjxem22hcvzimtebslkul/comments" }, "plusoners": { "totalItems": 586, "selfLink": "https://www.googleapis.com/plus/v1/activities/z135v1tiupnatjxem22hcvzimtebslkul/people/plusoners" }, "resharers": { "totalItems": 49, "selfLink": "https://www.googleapis.com/plus/v1/activities/z135v1tiupnatjxem22hcvzimtebslkul/people/resharers" }, "attachments": [ { "objectType": "article", "displayName": "Google Online Security Blog: Security rewards at Google: Two MEEELLION Dollars Later", "content": "Monday, August 12, 2013 12:55 PM. Posted by Chris Evans and Adam Mein, Masters of Coin One of Google's core security principles is to engage the community, to better protect our users and build relationships with security researchers. We had this principle in mind as we launched our Chromium and ...", "url": "http://g.co/dp9n" } ] }, "provider": { "title": "Google+" }, "access": { "kind": "plus#acl", "description": "Public", "items": [ { "type": "public" } ] } }, { "kind": "plus#activity", "etag": "\"aMoGitCCK7ZwjEjUM2ewtDjZJuk/g9GLas-lnTLTZchyjo_ekvMpJlI\"", "title": "Happy birthday to Erwin Schrödinger! In honor of the Austrian physicist's 126th birthday, our doodle...", "published": "2013-08-12T16:29:59.507Z", "updated": "2013-08-12T16:29:59.507Z", "id": "z134jbzjfqa5exkok04cdp3jxuf5cz2a3e4", "url": "https://plus.google.com/116899029375914044550/posts/RB1aDr6BPMh", "actor": { "id": "116899029375914044550", "displayName": "Google", "url": "https://plus.google.com/116899029375914044550", "image": { "url": "https://lh4.googleusercontent.com/-v0soe-ievYE/AAAAAAAAAAI/AAAAAAABSw4/mVgTJbt4qek/photo.jpg?sz=50" } }, "verb": "post", "object": { "objectType": "note", "content": "Happy birthday to Erwin Schrödinger! In honor of the Austrian physicist's 126th birthday, our doodle illustrates the now-classic paradox of Schrödinger's cat—a thought experiment in which a cat in a sealed box is both alive and dead at the same time, and which Schrödinger devised to criticize the Copenhagen interpretation of quantum mechanics as applied to everyday objects. ", "url": "https://plus.google.com/116899029375914044550/posts/RB1aDr6BPMh", "replies": { "totalItems": 75, "selfLink": "https://www.googleapis.com/plus/v1/activities/z134jbzjfqa5exkok04cdp3jxuf5cz2a3e4/comments" }, "plusoners": { "totalItems": 1804, "selfLink": "https://www.googleapis.com/plus/v1/activities/z134jbzjfqa5exkok04cdp3jxuf5cz2a3e4/people/plusoners" }, "resharers": { "totalItems": 247, "selfLink": "https://www.googleapis.com/plus/v1/activities/z134jbzjfqa5exkok04cdp3jxuf5cz2a3e4/people/resharers" }, "attachments": [ { "objectType": "photo", "id": "116899029375914044550.5911268185815459842", "content": "", "url": "https://plus.google.com/photos/116899029375914044550/albums/5911268182356937585/5911268185815459842?authkey=CL36ifj-sZ9w", "image": { "url": "https://lh6.googleusercontent.com/-NFtxROPaGNI/UgkLGIOZKAI/AAAAAAABS3A/Drft4lhEwU8/w506-h750/Erwin-Schrodinger-2013-HiRes.jpg", "type": "image/jpeg", "height": 750, "width": 506 }, "fullImage": { "url": "https://lh6.googleusercontent.com/-NFtxROPaGNI/UgkLGIOZKAI/AAAAAAABS3A/Drft4lhEwU8/Erwin-Schrodinger-2013-HiRes.jpg", "type": "image/jpeg", "height": 1103, "width": 2851 } } ] }, "provider": { "title": "Google+" }, "access": { "kind": "plus#acl", "description": "Public", "items": [ { "type": "public" } ] } }, { "kind": "plus#activity", "etag": "\"aMoGitCCK7ZwjEjUM2ewtDjZJuk/lX206J58asQLbe2uZI2bbNC4IhE\"", "title": "Calling all non-profits in India: apply by September 5 for the #GoogleImpactChallenge and tell us how...", "published": "2013-08-12T15:12:14.131Z", "updated": "2013-08-12T15:12:14.131Z", "id": "z12owdcxtsioe3ti204cdp3jxuf5cz2a3e4", "url": "https://plus.google.com/116899029375914044550/posts/Zaid8TFnznC", "actor": { "id": "116899029375914044550", "displayName": "Google", "url": "https://plus.google.com/116899029375914044550", "image": { "url": "https://lh4.googleusercontent.com/-v0soe-ievYE/AAAAAAAAAAI/AAAAAAABSw4/mVgTJbt4qek/photo.jpg?sz=50" } }, "verb": "post", "object": { "objectType": "note", "content": "Calling all non-profits in India: apply by September 5 for the #GoogleImpactChallenge and tell us how you would use technology to tackle problems in India and around the world. Visit g.co/indiachallenge for more information—let's make a better world, faster. ", "url": "https://plus.google.com/116899029375914044550/posts/Zaid8TFnznC", "replies": { "totalItems": 6, "selfLink": "https://www.googleapis.com/plus/v1/activities/z12owdcxtsioe3ti204cdp3jxuf5cz2a3e4/comments" }, "plusoners": { "totalItems": 279, "selfLink": "https://www.googleapis.com/plus/v1/activities/z12owdcxtsioe3ti204cdp3jxuf5cz2a3e4/people/plusoners" }, "resharers": { "totalItems": 59, "selfLink": "https://www.googleapis.com/plus/v1/activities/z12owdcxtsioe3ti204cdp3jxuf5cz2a3e4/people/resharers" }, "attachments": [ { "objectType": "photo", "id": "116899029375914044550.5911250156971566018", "content": "", "url": "https://plus.google.com/photos/116899029375914044550/albums/5911250151035302785/5911250156971566018?authkey=CP-wh5m3tNbYMw", "image": { "url": "https://lh3.googleusercontent.com/-suglUN-duC8/Ugj6stjDI8I/AAAAAAABS2E/r2-u6GnO3dE/w506-h750/1mCqII7yGwH_1s3Z4paZ_cRmgMqiP7j3DiXI0.png", "type": "image/jpeg", "height": 750, "width": 506 }, "fullImage": { "url": "https://lh3.googleusercontent.com/-suglUN-duC8/Ugj6stjDI8I/AAAAAAABS2E/r2-u6GnO3dE/1mCqII7yGwH_1s3Z4paZ_cRmgMqiP7j3DiXI0.png", "type": "image/jpeg", "height": 746, "width": 1097 } } ] }, "provider": { "title": "Google+" }, "access": { "kind": "plus#acl", "description": "Public", "items": [ { "type": "public" } ] } }, { "kind": "plus#activity", "etag": "\"aMoGitCCK7ZwjEjUM2ewtDjZJuk/-H3RZ9LQ2rHfeKOR6kdFBNSZwF8\"", "title": "Friday we're wishing a happy National Day to Singapore!", "published": "2013-08-09T15:54:39.774Z", "updated": "2013-08-09T15:54:39.774Z", "id": "z13bh31g2vrdyff2h22hcvzimtebslkul", "url": "https://plus.google.com/116899029375914044550/posts/DwPhqmVKsjs", "actor": { "id": "116899029375914044550", "displayName": "Google", "url": "https://plus.google.com/116899029375914044550", "image": { "url": "https://lh4.googleusercontent.com/-v0soe-ievYE/AAAAAAAAAAI/AAAAAAABSw4/mVgTJbt4qek/photo.jpg?sz=50" } }, "verb": "post", "object": { "objectType": "note", "content": "Friday we're wishing a happy National Day to Singapore!", "url": "https://plus.google.com/116899029375914044550/posts/DwPhqmVKsjs", "replies": { "totalItems": 76, "selfLink": "https://www.googleapis.com/plus/v1/activities/z13bh31g2vrdyff2h22hcvzimtebslkul/comments" }, "plusoners": { "totalItems": 1065, "selfLink": "https://www.googleapis.com/plus/v1/activities/z13bh31g2vrdyff2h22hcvzimtebslkul/people/plusoners" }, "resharers": { "totalItems": 75, "selfLink": "https://www.googleapis.com/plus/v1/activities/z13bh31g2vrdyff2h22hcvzimtebslkul/people/resharers" }, "attachments": [ { "objectType": "photo", "id": "116899029375914044550.5910148333756152706", "content": "", "url": "https://plus.google.com/photos/116899029375914044550/albums/5910148328868206385/5910148333756152706?authkey=CP2p7I3p1YfzZQ", "image": { "url": "https://lh6.googleusercontent.com/-eQUESkanwdk/UgUQmKNm-4I/AAAAAAABSoE/r60Ke7Te5Bk/w506-h750/SingaporeNationalDay13-hires.jpg", "type": "image/jpeg", "height": 750, "width": 506 }, "fullImage": { "url": "https://lh6.googleusercontent.com/-eQUESkanwdk/UgUQmKNm-4I/AAAAAAABSoE/r60Ke7Te5Bk/SingaporeNationalDay13-hires.jpg", "type": "image/jpeg", "height": 1103, "width": 2851 } } ] }, "provider": { "title": "Google+" }, "access": { "kind": "plus#acl", "description": "Public", "items": [ { "type": "public" } ] } }, { "kind": "plus#activity", "etag": "\"aMoGitCCK7ZwjEjUM2ewtDjZJuk/1YIygsjlF_4KAzVhrmMPrmAePAw\"", "title": "In Australia Friday, we're wishing a galaxy-sized happy birthday to radio astronomer Wilbur Norman \"...", "published": "2013-08-08T23:50:35.711Z", "updated": "2013-08-08T23:50:35.711Z", "id": "z134dx25jyzwh15t422hcvzimtebslkul", "url": "https://plus.google.com/116899029375914044550/posts/7436qasKaaT", "actor": { "id": "116899029375914044550", "displayName": "Google", "url": "https://plus.google.com/116899029375914044550", "image": { "url": "https://lh4.googleusercontent.com/-v0soe-ievYE/AAAAAAAAAAI/AAAAAAABSw4/mVgTJbt4qek/photo.jpg?sz=50" } }, "verb": "post", "object": { "objectType": "note", "content": "In Australia Friday, we're wishing a galaxy-sized happy birthday to radio astronomer Wilbur Norman "Chris" Christiansen, known for building the first grating array for scanning the sun and helping prove that we live in a spiral galaxy. ", "url": "https://plus.google.com/116899029375914044550/posts/7436qasKaaT", "replies": { "totalItems": 62, "selfLink": "https://www.googleapis.com/plus/v1/activities/z134dx25jyzwh15t422hcvzimtebslkul/comments" }, "plusoners": { "totalItems": 1384, "selfLink": "https://www.googleapis.com/plus/v1/activities/z134dx25jyzwh15t422hcvzimtebslkul/people/plusoners" }, "resharers": { "totalItems": 153, "selfLink": "https://www.googleapis.com/plus/v1/activities/z134dx25jyzwh15t422hcvzimtebslkul/people/resharers" }, "attachments": [ { "objectType": "photo", "id": "116899029375914044550.5909897568680881522", "content": "", "url": "https://plus.google.com/photos/116899029375914044550/albums/5909897566236775281/5909897568680881522?authkey=CJ2T387m5uPujAE", "image": { "url": "https://lh4.googleusercontent.com/-0JYUWMkJy_E/UgQshtgrLXI/AAAAAAABSfM/bQiWrFNxx5c/w506-h750/wnchristiansen13_hires.jpg", "type": "image/jpeg", "height": 750, "width": 506 }, "fullImage": { "url": "https://lh4.googleusercontent.com/-0JYUWMkJy_E/UgQshtgrLXI/AAAAAAABSfM/bQiWrFNxx5c/wnchristiansen13_hires.jpg", "type": "image/jpeg", "height": 1140, "width": 2759 } } ] }, "provider": { "title": "Google+" }, "access": { "kind": "plus#acl", "description": "Public", "items": [ { "type": "public" } ] } }, { "kind": "plus#activity", "etag": "\"aMoGitCCK7ZwjEjUM2ewtDjZJuk/cz6mM1DtdH1yJaYe4gerVa-6cgc\"", "title": "When you're out to dinner, don't shy away from ordering dishes that include unfamiliar ingredients. ...", "published": "2013-08-08T22:10:51.581Z", "updated": "2013-08-08T22:10:51.581Z", "id": "z13vxpyzezefyvv5404cdp3jxuf5cz2a3e4", "url": "https://plus.google.com/116899029375914044550/posts/UaFpZgwfQY6", "actor": { "id": "116899029375914044550", "displayName": "Google", "url": "https://plus.google.com/116899029375914044550", "image": { "url": "https://lh4.googleusercontent.com/-v0soe-ievYE/AAAAAAAAAAI/AAAAAAABSw4/mVgTJbt4qek/photo.jpg?sz=50" } }, "verb": "post", "object": { "objectType": "note", "content": "When you're out to dinner, don't shy away from ordering dishes that include unfamiliar ingredients. Say that you're at a Mexican restaurant and you see that your dish comes with menudo, but you don't know what menudo is. Tap the microphone on your Google Search app and ask, "What is menudo?" You'll quickly learn that it's a traditional Mexican soup. Not sure of the ingredients in the cocktail listed as a michelada? Ask, "What's a michelada?" and learn that it's prepared with beer, lime juice, sauces and spices in a glass with a salted rim. Thanks to Google Search, you've just expanded your palate!

#searchtips #googlesearch ", "url": "https://plus.google.com/116899029375914044550/posts/UaFpZgwfQY6", "replies": { "totalItems": 70, "selfLink": "https://www.googleapis.com/plus/v1/activities/z13vxpyzezefyvv5404cdp3jxuf5cz2a3e4/comments" }, "plusoners": { "totalItems": 512, "selfLink": "https://www.googleapis.com/plus/v1/activities/z13vxpyzezefyvv5404cdp3jxuf5cz2a3e4/people/plusoners" }, "resharers": { "totalItems": 51, "selfLink": "https://www.googleapis.com/plus/v1/activities/z13vxpyzezefyvv5404cdp3jxuf5cz2a3e4/people/resharers" }, "attachments": [ { "objectType": "photo", "id": "116899029375914044550.5909874155711292194", "content": "", "url": "https://plus.sandbox.google.com/photos/116899029375914044550/albums/5909874152096991889/5909874155711292194?authkey=CLyvg6WRzouwKQ", "image": { "url": "https://lh4.googleusercontent.com/-Ji9GU65BSAI/UgQXO5Zu4yI/AAAAAAABScI/aoAmjryMVGU/w506-h750/menudo.jpg", "type": "image/jpeg", "height": 750, "width": 506 }, "fullImage": { "url": "https://lh4.googleusercontent.com/-Ji9GU65BSAI/UgQXO5Zu4yI/AAAAAAABScI/aoAmjryMVGU/menudo.jpg", "type": "image/jpeg", "height": 1280, "width": 768 } } ] }, "provider": { "title": "Google+" }, "access": { "kind": "plus#acl", "description": "Public", "items": [ { "type": "public" } ] } }, { "kind": "plus#activity", "etag": "\"aMoGitCCK7ZwjEjUM2ewtDjZJuk/aEkw4whfQ3VYQ6IaCDKnFM3Ud7Q\"", "title": "In South Korea today a delicate doodle marked Mugunghwa Day, which celebrates the national flower, Hibiscus...", "published": "2013-08-08T18:48:31.009Z", "updated": "2013-08-08T18:48:31.009Z", "id": "z13ltxc5zvypw5bvz22hcvzimtebslkul", "url": "https://plus.google.com/116899029375914044550/posts/NHSyhtgMUAW", "actor": { "id": "116899029375914044550", "displayName": "Google", "url": "https://plus.google.com/116899029375914044550", "image": { "url": "https://lh4.googleusercontent.com/-v0soe-ievYE/AAAAAAAAAAI/AAAAAAABSw4/mVgTJbt4qek/photo.jpg?sz=50" } }, "verb": "post", "object": { "objectType": "note", "content": "In South Korea today a delicate doodle marked Mugunghwa Day, which celebrates the national flower, Hibiscus syriacus.", "url": "https://plus.google.com/116899029375914044550/posts/NHSyhtgMUAW", "replies": { "totalItems": 58, "selfLink": "https://www.googleapis.com/plus/v1/activities/z13ltxc5zvypw5bvz22hcvzimtebslkul/comments" }, "plusoners": { "totalItems": 826, "selfLink": "https://www.googleapis.com/plus/v1/activities/z13ltxc5zvypw5bvz22hcvzimtebslkul/people/plusoners" }, "resharers": { "totalItems": 77, "selfLink": "https://www.googleapis.com/plus/v1/activities/z13ltxc5zvypw5bvz22hcvzimtebslkul/people/resharers" }, "attachments": [ { "objectType": "photo", "id": "116899029375914044550.5909811261151559490", "content": "", "url": "https://plus.google.com/photos/116899029375914044550/albums/5909811255777172865/5909811261151559490?authkey=CIDzsJuv_Z70JQ", "image": { "url": "https://lh3.googleusercontent.com/-KRHALiB_-8w/UgPeB86Kv0I/AAAAAAABSZk/CQmMVlZEPo4/w506-h750/mugunghwa-2013-hires.jpg", "type": "image/jpeg", "height": 750, "width": 506 }, "fullImage": { "url": "https://lh3.googleusercontent.com/-KRHALiB_-8w/UgPeB86Kv0I/AAAAAAABSZk/CQmMVlZEPo4/mugunghwa-2013-hires.jpg", "type": "image/jpeg", "height": 828, "width": 1976 } } ] }, "provider": { "title": "Google+" }, "access": { "kind": "plus#acl", "description": "Public", "items": [ { "type": "public" } ] } }, { "kind": "plus#activity", "etag": "\"aMoGitCCK7ZwjEjUM2ewtDjZJuk/5VIXy--JHNya2x4qUoNf44QlXGc\"", "title": "Feeling phatter these days? The trends of the ‘90s are making a comeback: Since the beginning of the...", "published": "2013-08-08T17:22:29.799Z", "updated": "2013-08-08T17:23:44.000Z", "id": "z12oirh4rnq5wpqde22hcvzimtebslkul", "url": "https://plus.google.com/116899029375914044550/posts/89F2h7ziCuV", "actor": { "id": "116899029375914044550", "displayName": "Google", "url": "https://plus.google.com/116899029375914044550", "image": { "url": "https://lh4.googleusercontent.com/-v0soe-ievYE/AAAAAAAAAAI/AAAAAAABSw4/mVgTJbt4qek/photo.jpg?sz=50" } }, "verb": "post", "object": { "objectType": "note", "content": "Feeling phatter these days? The trends of the ‘90s are making a comeback: Since the beginning of the year, in the U.S., we’ve noticed significant increases in searches for styles like [crop tops], [acid wash shorts] and even [bucket hats] (calling Blossom)! And marketers and agencies are using display ads, social media, search ads, online videos and more online tools to meet that demand. Whether it's overalls, high-waisted jeans or Furbys, here are a few examples of savvy marketers using the web to reach people looking to turn back the clock: http://g.co/ydar", "url": "https://plus.google.com/116899029375914044550/posts/89F2h7ziCuV", "replies": { "totalItems": 26, "selfLink": "https://www.googleapis.com/plus/v1/activities/z12oirh4rnq5wpqde22hcvzimtebslkul/comments" }, "plusoners": { "totalItems": 221, "selfLink": "https://www.googleapis.com/plus/v1/activities/z12oirh4rnq5wpqde22hcvzimtebslkul/people/plusoners" }, "resharers": { "totalItems": 27, "selfLink": "https://www.googleapis.com/plus/v1/activities/z12oirh4rnq5wpqde22hcvzimtebslkul/people/resharers" }, "attachments": [ { "objectType": "album", "displayName": "90s style meets new-school advertising", "id": "116899029375914044550.5909797338151866737", "url": "https://plus.google.com/photos/116899029375914044550/albums/5909797338151866737?authkey=CNzttvqMnu7PlwE", "thumbnails": [ { "url": "https://plus.google.com/photos/116899029375914044550/albums/5909797338151866737/5909797346528543026?authkey=CNzttvqMnu7PlwE", "description": "THEN AND NOW: Zubaz print campaign, c. 1991, Zubaz mobile search ads, c. 2013", "image": { "url": "https://lh5.googleusercontent.com/--G3snS6LAOs/UgPRYA5hQTI/AAAAAAABSW8/7WP5yl3divs/w379-h379-p/Zebra+Zubaz+grouped.png", "type": "image/jpeg", "height": 379, "width": 379 } }, { "url": "https://plus.google.com/photos/116899029375914044550/albums/5909797338151866737/5909797344689768338?authkey=CNzttvqMnu7PlwE", "description": "THEN AND NOW: American Apparel print ad c. 1999, American Apparel GDN Display and mobile search ads, c. 2013", "image": { "url": "https://lh3.googleusercontent.com/-nd7iJPEzehY/UgPRX6DHx5I/AAAAAAABSXI/JhZ3nNXbTKE/w126-h126-p/am+apparel+grouped.png", "type": "image/jpeg", "height": 126, "width": 126 } }, { "url": "https://plus.google.com/photos/116899029375914044550/albums/5909797338151866737/5909797355184814354?authkey=CNzttvqMnu7PlwE", "description": "THEN AND NOW: Marc Jacobs print ad, feat. photo of Kim Gordon by Juergen Teller, c.1998 (left) Google+ Hangout viewing party during Marc Jacobs’ NYC Fashion week show, c. 2013 (right)", "image": { "url": "https://lh4.googleusercontent.com/-m-fS2-_mM9Q/UgPRYhJVeRI/AAAAAAABSXM/oKRdPz3ntDM/w126-h126-p/marc+jacobs+grouped.png", "type": "image/jpeg", "height": 126, "width": 126 } }, { "url": "https://plus.google.com/photos/116899029375914044550/albums/5909797338151866737/5909797345195660434?authkey=CNzttvqMnu7PlwE", "description": "THEN AND NOW: Hasbro newspaper ad for original Furby launch, c. 1998, YouTube video still from Furby re-launch, c. 2012", "image": { "url": "https://lh3.googleusercontent.com/-QTFg0tbTHgw/UgPRX77vFJI/AAAAAAABSWw/1YMlJzA6y9w/w126-h126-p/furby.png", "type": "image/jpeg", "height": 126, "width": 126 } }, { "url": "https://plus.google.com/photos/116899029375914044550/albums/5909797338151866737/5909797358494006386?authkey=CNzttvqMnu7PlwE", "description": "THEN AND NOW: Promoting overalls ‘90s style ... and 2013 style (Image courtesy: Buzzfeed)", "image": { "url": "https://lh5.googleusercontent.com/-A3LXkSh8-kI/UgPRYteTvHI/AAAAAAABSXE/_bxSPhczMaE/w126-h126-p/nysync+-+PLA+combined.png", "type": "image/jpeg", "height": 126, "width": 126 } } ] } ] }, "provider": { "title": "Google+" }, "access": { "kind": "plus#acl", "description": "Public", "items": [ { "type": "public" } ] } }, { "kind": "plus#activity", "etag": "\"aMoGitCCK7ZwjEjUM2ewtDjZJuk/6z80CoCpJBP9jZi4I63sS_kN36Y\"", "title": "Today at the Googleplex, we're mining the news with the Center for Investigative Reporting at #TechRaking...", "published": "2013-08-07T18:40:36.196Z", "updated": "2013-08-07T18:40:36.196Z", "id": "z13iipioyvykdrd3t22hcvzimtebslkul", "url": "https://plus.google.com/116899029375914044550/posts/MHbaaBWikAF", "actor": { "id": "116899029375914044550", "displayName": "Google", "url": "https://plus.google.com/116899029375914044550", "image": { "url": "https://lh4.googleusercontent.com/-v0soe-ievYE/AAAAAAAAAAI/AAAAAAABSw4/mVgTJbt4qek/photo.jpg?sz=50" } }, "verb": "post", "object": { "objectType": "note", "content": "Today at the Googleplex, we're mining the news with the Center for Investigative Reporting at #TechRaking 3. The aim of this event is to try to raise the bar in the conversation about how everyone can use data in storytelling; Google's Journalism Fellows will also share what they've been working on this summer. Follow the conversation here on Google+ with the hashtag #TechRaking . ", "url": "https://plus.google.com/116899029375914044550/posts/MHbaaBWikAF", "replies": { "totalItems": 6, "selfLink": "https://www.googleapis.com/plus/v1/activities/z13iipioyvykdrd3t22hcvzimtebslkul/comments" }, "plusoners": { "totalItems": 189, "selfLink": "https://www.googleapis.com/plus/v1/activities/z13iipioyvykdrd3t22hcvzimtebslkul/people/plusoners" }, "resharers": { "totalItems": 11, "selfLink": "https://www.googleapis.com/plus/v1/activities/z13iipioyvykdrd3t22hcvzimtebslkul/people/resharers" } }, "provider": { "title": "Google+" }, "access": { "kind": "plus#acl", "description": "Public", "items": [ { "type": "public" } ] } }, { "kind": "plus#activity", "etag": "\"aMoGitCCK7ZwjEjUM2ewtDjZJuk/UipfwkNeiq3Z1IjwoLKkIfImhlM\"", "title": "On homepages throughout Africa today, our we're paying tribute to Abebe Bikila, Ethiopian runner who...", "published": "2013-08-07T16:59:16.599Z", "updated": "2013-08-07T16:59:16.599Z", "id": "z12ewj4qno2aztmvh22hcvzimtebslkul", "url": "https://plus.google.com/116899029375914044550/posts/KLCGo8HrNaY", "actor": { "id": "116899029375914044550", "displayName": "Google", "url": "https://plus.google.com/116899029375914044550", "image": { "url": "https://lh4.googleusercontent.com/-v0soe-ievYE/AAAAAAAAAAI/AAAAAAABSw4/mVgTJbt4qek/photo.jpg?sz=50" } }, "verb": "post", "object": { "objectType": "note", "content": "On homepages throughout Africa today, our we're paying tribute to Abebe Bikila, Ethiopian runner who was the first Sub-Saharan African to win an Olympic gold medal. Oh... and he did it running barefoot! ", "url": "https://plus.google.com/116899029375914044550/posts/KLCGo8HrNaY", "replies": { "totalItems": 30, "selfLink": "https://www.googleapis.com/plus/v1/activities/z12ewj4qno2aztmvh22hcvzimtebslkul/comments" }, "plusoners": { "totalItems": 855, "selfLink": "https://www.googleapis.com/plus/v1/activities/z12ewj4qno2aztmvh22hcvzimtebslkul/people/plusoners" }, "resharers": { "totalItems": 60, "selfLink": "https://www.googleapis.com/plus/v1/activities/z12ewj4qno2aztmvh22hcvzimtebslkul/people/resharers" }, "attachments": [ { "objectType": "photo", "id": "116899029375914044550.5909416371145377458", "content": "", "url": "https://plus.google.com/photos/116899029375914044550/albums/5909416370169052481/5909416371145377458?authkey=CMyWl8nY8_OOUQ", "image": { "url": "https://lh6.googleusercontent.com/-v27BZTPkcog/UgJ24U__hrI/AAAAAAABSSY/BDwfsf4AllM/w506-h750/abebebikila-2013-hires.jpg", "type": "image/jpeg", "height": 750, "width": 506 }, "fullImage": { "url": "https://lh6.googleusercontent.com/-v27BZTPkcog/UgJ24U__hrI/AAAAAAABSSY/BDwfsf4AllM/abebebikila-2013-hires.jpg", "type": "image/jpeg", "height": 858, "width": 1976 } } ] }, "provider": { "title": "Google+" }, "access": { "kind": "plus#acl", "description": "Public", "items": [ { "type": "public" } ] } }, { "kind": "plus#activity", "etag": "\"aMoGitCCK7ZwjEjUM2ewtDjZJuk/ceDMGoR95L4-39DORAvKtmVjXMY\"", "title": "Meet +Alex Blaszczuk: Glass Explorer, law student and owner of a 20lb cat. In the fall of 2011, a car...", "published": "2013-08-07T14:30:39.337Z", "updated": "2013-08-07T14:30:39.337Z", "id": "z13mu51zqtmxhpunh22hcvzimtebslkul", "url": "https://plus.google.com/116899029375914044550/posts/KNXPa2E5eSx", "actor": { "id": "116899029375914044550", "displayName": "Google", "url": "https://plus.google.com/116899029375914044550", "image": { "url": "https://lh4.googleusercontent.com/-v0soe-ievYE/AAAAAAAAAAI/AAAAAAABSw4/mVgTJbt4qek/photo.jpg?sz=50" } }, "verb": "post", "object": { "objectType": "note", "content": "Meet +Alex Blaszczuk: Glass Explorer, law student and owner of a 20lb cat. In the fall of 2011, a car accident en route to a celebratory camping trip left Alex paralyzed from the chest down, unable to use her hands. Last month, Alex finally made it camping and shared her story #throughglass.

To learn more about Alex and her adventures with Glass, visit alexbtrust.org.

This entire film was shot through Glass.", "url": "https://plus.google.com/116899029375914044550/posts/KNXPa2E5eSx", "replies": { "totalItems": 35, "selfLink": "https://www.googleapis.com/plus/v1/activities/z13mu51zqtmxhpunh22hcvzimtebslkul/comments" }, "plusoners": { "totalItems": 606, "selfLink": "https://www.googleapis.com/plus/v1/activities/z13mu51zqtmxhpunh22hcvzimtebslkul/people/plusoners" }, "resharers": { "totalItems": 122, "selfLink": "https://www.googleapis.com/plus/v1/activities/z13mu51zqtmxhpunh22hcvzimtebslkul/people/resharers" }, "attachments": [ { "objectType": "video", "displayName": "Explorer Story: Alex Blaszczuk [through Google Glass]", "content": "Meet Alex Blaszczuk: Google Glass Explorer, law student, and owner of a 20lb cat. In the fall of 2011, a car accident en route to a celebratory camping trip ...", "url": "http://www.youtube.com/watch?v=P8GVKqGruOQ", "image": { "url": "https://lh3.googleusercontent.com/proxy/GpMZ2mfnuUiwCRHOS9tcqFmwWuCwc7UKEAl34DI6XO-BJlNRGR7VbsBC4nVcK08bsTPgqpvX4ZM-8-qsuJRNeRWa9sSS_4BQjQAEeDRntA=w506-h284-n", "type": "image/jpeg", "height": 284, "width": 506 }, "embed": { "url": "http://www.youtube.com/v/P8GVKqGruOQ?autohide=1&version=3", "type": "application/x-shockwave-flash" } } ] }, "provider": { "title": "Google+" }, "access": { "kind": "plus#acl", "description": "Public", "items": [ { "type": "public" } ] } }, { "kind": "plus#activity", "etag": "\"aMoGitCCK7ZwjEjUM2ewtDjZJuk/KeEx6IwYLNzwf6wAa74r9FwZPvQ\"", "title": "Try using the Location filter in Google Hotel Finder to check out accommodations in your ideal neighborhood...", "published": "2013-08-06T22:12:26.675Z", "updated": "2013-08-06T22:12:26.675Z", "id": "z13rslgpbqroh1fpc04cdp3jxuf5cz2a3e4", "url": "https://plus.google.com/116899029375914044550/posts/VALzXGRQMYa", "actor": { "id": "116899029375914044550", "displayName": "Google", "url": "https://plus.google.com/116899029375914044550", "image": { "url": "https://lh4.googleusercontent.com/-v0soe-ievYE/AAAAAAAAAAI/AAAAAAABSw4/mVgTJbt4qek/photo.jpg?sz=50" } }, "verb": "post", "object": { "objectType": "note", "content": "Try using the Location filter in Google Hotel Finder to check out accommodations in your ideal neighborhood. Say that you're planning a vacation to Berlin and want to stay in Mitte, the centrally-located historic district. Select your dates and use the Location filter to select Mitte. Hotel results immediately filter to show only those in Mitte, plus you can see the district's boundaries on the map. As you peruse your hotel options, be sure to click the star to save it and when you're ready to make your final decision, click on Saved to see a list of your favorites. Make your reservation by choosing one of the options under Book a Room and finish the process on the selected booking website.

#searchtips #googlesearch ", "url": "https://plus.google.com/116899029375914044550/posts/VALzXGRQMYa", "replies": { "totalItems": 34, "selfLink": "https://www.googleapis.com/plus/v1/activities/z13rslgpbqroh1fpc04cdp3jxuf5cz2a3e4/comments" }, "plusoners": { "totalItems": 658, "selfLink": "https://www.googleapis.com/plus/v1/activities/z13rslgpbqroh1fpc04cdp3jxuf5cz2a3e4/people/plusoners" }, "resharers": { "totalItems": 113, "selfLink": "https://www.googleapis.com/plus/v1/activities/z13rslgpbqroh1fpc04cdp3jxuf5cz2a3e4/people/resharers" }, "attachments": [ { "objectType": "photo", "id": "116899029375914044550.5909132549800602210", "content": "", "url": "https://plus.sandbox.google.com/photos/116899029375914044550/albums/5909132549618251281/5909132549800602210?authkey=CPjLq5a90eTGfA", "image": { "url": "https://lh4.googleusercontent.com/-0dHdLqdxMT0/UgF0vwGQKmI/AAAAAAABSM4/RYMUZ_dllg0/w506-h750/mitte.jpg", "type": "image/jpeg", "height": 750, "width": 506 }, "fullImage": { "url": "https://lh4.googleusercontent.com/-0dHdLqdxMT0/UgF0vwGQKmI/AAAAAAABSM4/RYMUZ_dllg0/mitte.jpg", "type": "image/jpeg", "height": 844, "width": 1325 } } ] }, "provider": { "title": "Google+" }, "access": { "kind": "plus#acl", "description": "Public", "items": [ { "type": "public" } ] } } ] }PKR}G6cmsplugin_googleplus/tests/example_project/__init__.pyPKT}GR{{2cmsplugin_googleplus/tests/example_project/urls.pyfrom __future__ import unicode_literals from django.conf import settings from django.conf.urls import include, patterns, url from django.conf.urls.i18n import i18n_patterns from django.contrib import admin admin.autodiscover() urlpatterns = i18n_patterns( '', url(r'^admin/', include(admin.site.urls)), url(r'^', include('cms.urls')), ) if settings.DEBUG: urlpatterns = patterns( '', url(r'^media/(?P.*)$', 'django.views.static.serve', {'document_root': settings.MEDIA_ROOT, 'show_indexes': True}), url(r'', include('django.contrib.staticfiles.urls')), ) + urlpatterns PKDkFHӰKK4cmsplugin_googleplus-0.6.0.dist-info/DESCRIPTION.rstcmsplugin-googleplus ==================== Django-cms plugin for fetching Google+ activities. You can find a `preview `_ at the bottom of this README. Info ---- .. image:: https://img.shields.io/pypi/status/cmsplugin-googleplus.svg?style=plastic :target: https://pypi.python.org/pypi/cmsplugin-googleplus/ :alt: Development Status: Beta .. image:: https://img.shields.io/pypi/v/cmsplugin-googleplus.svg?style=plastic :target: https://pypi.python.org/pypi/cmsplugin-googleplus/ :alt: Latest Version .. image:: https://img.shields.io/pypi/dm/cmsplugin-googleplus.svg?style=plastic :target: https://pypi.python.org/pypi/cmsplugin-googleplus/ :alt: Downloads .. image:: https://img.shields.io/pypi/l/cmsplugin-googleplus.svg?style=plastic :target: https://pypi.python.org/pypi/cmsplugin-googleplus/ :alt: License .. image:: https://img.shields.io/pypi/wheel/cmsplugin-googleplus.svg?style=plastic :target: https://pypi.python.org/pypi/cmsplugin-googleplus/ :alt: Wheel Status .. image:: https://img.shields.io/pypi/pyversions/cmsplugin-googleplus.svg?style=plastic :target: https://pypi.python.org/pypi/cmsplugin-googleplus/ :alt: Supported Python Versions | Continuous Integration ---------------------- .. image:: https://img.shields.io/travis/itbabu/cmsplugin-googleplus/master.svg?style=plastic :target: https://travis-ci.org/itbabu/cmsplugin-googleplus/ :alt: Build Status .. image:: https://img.shields.io/coveralls/itbabu/cmsplugin-googleplus/master.svg?style=plastic :alt: Coverage Status :target: https://coveralls.io/r/itbabu/cmsplugin-googleplus?branch=master | Documentation ------------- .. image:: https://readthedocs.org/projects/cmsplugin-googleplus/badge/?version=latest :alt: Documentation :target: http://cmsplugin-googleplus.readthedocs.org/en/latest/ | Preview ------- This is how the plugin looks with the example template. .. image:: https://raw.github.com/itbabu/cmsplugin-googleplus/master/docs/images/cmsplugin-googleplus-preview.png Have Fun! Marco PKDkFHde|2cmsplugin_googleplus-0.6.0.dist-info/metadata.json{"classifiers": ["Development Status :: 4 - Beta", "Environment :: Web Environment", "Framework :: Django", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Operating System :: OS Independent", "Programming Language :: Python", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3.3", "Programming Language :: Python :: 3.4", "Programming Language :: Python :: 3.5", "Topic :: Internet :: WWW/HTTP", "Topic :: Internet :: WWW/HTTP :: Dynamic Content"], "extensions": {"python.details": {"contacts": [{"email": "info@marcobadan.com", "name": "Marco Badan", "role": "author"}], "document_names": {"description": "DESCRIPTION.rst"}, "project_urls": {"Home": "https://github.com/itbabu/cmsplugin-googleplus"}}}, "extras": [], "generator": "bdist_wheel (0.28.0)", "license": "MIT License", "metadata_version": "2.0", "name": "cmsplugin-googleplus", "run_requires": [{"requires": ["google-api-python-client (>=1.4.2)", "python-dateutil (>=2.4.2)"]}], "summary": "Django-CMS plugin for Google Plus Activities", "test_requires": [{"requires": ["django-nose (>=1.4.2)", "mock (>=1.3.0)"]}], "version": "0.6.0"}PK@kFHmq..-cmsplugin_googleplus-0.6.0.dist-info/pbr.json{"git_version": "e597c84", "is_release": true}PK@kFHxP2cmsplugin_googleplus-0.6.0.dist-info/top_level.txtcmsplugin_googleplus PKDkFH>nn*cmsplugin_googleplus-0.6.0.dist-info/WHEELWheel-Version: 1.0 Generator: bdist_wheel (0.28.0) Root-Is-Purelib: true Tag: py2-none-any Tag: py3-none-any PKDkFHy]  -cmsplugin_googleplus-0.6.0.dist-info/METADATAMetadata-Version: 2.0 Name: cmsplugin-googleplus Version: 0.6.0 Summary: Django-CMS plugin for Google Plus Activities Home-page: https://github.com/itbabu/cmsplugin-googleplus Author: Marco Badan Author-email: info@marcobadan.com License: MIT License Platform: UNKNOWN Classifier: Development Status :: 4 - Beta Classifier: Environment :: Web Environment Classifier: Framework :: Django Classifier: Intended Audience :: Developers Classifier: License :: OSI Approved :: MIT License Classifier: Operating System :: OS Independent Classifier: Programming Language :: Python Classifier: Programming Language :: Python :: 2.7 Classifier: Programming Language :: Python :: 3.3 Classifier: Programming Language :: Python :: 3.4 Classifier: Programming Language :: Python :: 3.5 Classifier: Topic :: Internet :: WWW/HTTP Classifier: Topic :: Internet :: WWW/HTTP :: Dynamic Content Requires-Dist: google-api-python-client (>=1.4.2) Requires-Dist: python-dateutil (>=2.4.2) cmsplugin-googleplus ==================== Django-cms plugin for fetching Google+ activities. You can find a `preview `_ at the bottom of this README. Info ---- .. image:: https://img.shields.io/pypi/status/cmsplugin-googleplus.svg?style=plastic :target: https://pypi.python.org/pypi/cmsplugin-googleplus/ :alt: Development Status: Beta .. image:: https://img.shields.io/pypi/v/cmsplugin-googleplus.svg?style=plastic :target: https://pypi.python.org/pypi/cmsplugin-googleplus/ :alt: Latest Version .. image:: https://img.shields.io/pypi/dm/cmsplugin-googleplus.svg?style=plastic :target: https://pypi.python.org/pypi/cmsplugin-googleplus/ :alt: Downloads .. image:: https://img.shields.io/pypi/l/cmsplugin-googleplus.svg?style=plastic :target: https://pypi.python.org/pypi/cmsplugin-googleplus/ :alt: License .. image:: https://img.shields.io/pypi/wheel/cmsplugin-googleplus.svg?style=plastic :target: https://pypi.python.org/pypi/cmsplugin-googleplus/ :alt: Wheel Status .. image:: https://img.shields.io/pypi/pyversions/cmsplugin-googleplus.svg?style=plastic :target: https://pypi.python.org/pypi/cmsplugin-googleplus/ :alt: Supported Python Versions | Continuous Integration ---------------------- .. image:: https://img.shields.io/travis/itbabu/cmsplugin-googleplus/master.svg?style=plastic :target: https://travis-ci.org/itbabu/cmsplugin-googleplus/ :alt: Build Status .. image:: https://img.shields.io/coveralls/itbabu/cmsplugin-googleplus/master.svg?style=plastic :alt: Coverage Status :target: https://coveralls.io/r/itbabu/cmsplugin-googleplus?branch=master | Documentation ------------- .. image:: https://readthedocs.org/projects/cmsplugin-googleplus/badge/?version=latest :alt: Documentation :target: http://cmsplugin-googleplus.readthedocs.org/en/latest/ | Preview ------- This is how the plugin looks with the example template. .. image:: https://raw.github.com/itbabu/cmsplugin-googleplus/master/docs/images/cmsplugin-googleplus-preview.png Have Fun! Marco PKDkFH!< < +cmsplugin_googleplus-0.6.0.dist-info/RECORDcmsplugin_googleplus/__init__.py,sha256=CBY3jsC-9HCm7eZ6CKD-sYLCejqOJ1pYWPQM4LGIXcI,22 cmsplugin_googleplus/cms_plugins.py,sha256=H-znq7A9JJxwX-3pnsR4dSoGgeD-vqkCoU8PYmNwTM4,4267 cmsplugin_googleplus/conf.py,sha256=OyKZKjtW9qXjIwKp1CqdbuXCvkGgPdgGdlY64SND92c,478 cmsplugin_googleplus/globals.py,sha256=ff2HbXV16glMOUHJ_W2aArhLQfgbnQdbqMBUS5ws4YU,3414 cmsplugin_googleplus/googleplus.py,sha256=LeGJy9n8iPSi-RqiyxJ3eu8norZ0KD5grKBnzTuFBJs,5037 cmsplugin_googleplus/models.py,sha256=oEYYHlx62w8qJsN_GNANuW6mwvf0x3bmY6BoUgP6YB8,3289 cmsplugin_googleplus/locale/en/LC_MESSAGES/django.mo,sha256=EeBu_77xc5xW016tcvFyoKgfDq82bILHdGV4EFkPWtA,378 cmsplugin_googleplus/locale/en/LC_MESSAGES/django.po,sha256=x315DpqwADqKonlEK1iC-y02Nk_wqnbseo71JWHXKeo,5692 cmsplugin_googleplus/locale/it/LC_MESSAGES/django.mo,sha256=j3CdBcSee3K41T9DNGOxcunLwonK152ThgFQDcRDwcc,6052 cmsplugin_googleplus/locale/it/LC_MESSAGES/django.po,sha256=kvJgYDoz3malwuyY1hhz23gTKVp6w4p92u0TiGsElVM,7677 cmsplugin_googleplus/locale/pl/LC_MESSAGES/django.mo,sha256=AA6OY4fHEMU-p5NfRXQvDquOuZ6J5E34wEMsPdJcxos,6157 cmsplugin_googleplus/locale/pl/LC_MESSAGES/django.po,sha256=lACrkZ4iMyg0H1CIeaIQ-hUDEWFuFA5mD7bN_1LaDpo,7775 cmsplugin_googleplus/migrations/0001_initial.py,sha256=FaHe2OU-yxLl4iTuU_PO0qgdv0aNBREeeCyr7CoidOU,3464 cmsplugin_googleplus/migrations/0002_add_google_api_key.py,sha256=6XKJAjO0NbLZ1EhJT-t3rZAdRRgEW8r_BDUxBRAZ2NA,1112 cmsplugin_googleplus/migrations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 cmsplugin_googleplus/templates/cmsplugin_googleplus/twitter_bootstrap.html,sha256=5AszbDN3671eh39ZLTUHmJhmoEl-OHLMPhR17otsYN0,4408 cmsplugin_googleplus/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 cmsplugin_googleplus/tests/base.py,sha256=znmn_ixprtulCTsNE6wNiQofTSb0iwtaI9Ykf_8KMVI,1233 cmsplugin_googleplus/tests/test_cms_plugins.py,sha256=Nftj_xMoGjvdmDlQLBW3pGV7u12cyy2gmcOxpznDVGM,1753 cmsplugin_googleplus/tests/test_googleplus.py,sha256=H0M5ivvm8ZjcDOlA7z-kKcYPX84BzemEollhcYsYyvw,5065 cmsplugin_googleplus/tests/test_models.py,sha256=GoWqOPBjdytExjDrR3_1YK4ebvdKsoGhPuu0dvwVKY0,1021 cmsplugin_googleplus/tests/data/activities.json,sha256=Lr9iXliycA8ZrLTEMktQHP2FnijT4d27-tC8ricK1dg,76809 cmsplugin_googleplus/tests/example_project/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 cmsplugin_googleplus/tests/example_project/urls.py,sha256=TweKK-acYfcOHesJ9Q-Njv6uQUmA07pJzBVOczIvLzs,635 cmsplugin_googleplus-0.6.0.dist-info/DESCRIPTION.rst,sha256=9HnAgVEWRuk2xO3VVOMjWtFuI5D573mthpFQW1E4EAA,2123 cmsplugin_googleplus-0.6.0.dist-info/METADATA,sha256=WwrI_q7t9FfPYfPskEkMw9k0eGzI5oGxYahOBOfbCJM,3090 cmsplugin_googleplus-0.6.0.dist-info/RECORD,, cmsplugin_googleplus-0.6.0.dist-info/WHEEL,sha256=c5du820PMLPXFYzXDp0SSjIjJ-7MmVRpJa1kKfTaqlc,110 cmsplugin_googleplus-0.6.0.dist-info/metadata.json,sha256=DrB2m6qiKHkbR5LPAevBQTsDjfDjbhnKgqRRUnpzQZ4,1155 cmsplugin_googleplus-0.6.0.dist-info/pbr.json,sha256=uM_PFUtyY5XqC9fBN6QQNHJdVj0ypig_DGkFOpuNnP4,46 cmsplugin_googleplus-0.6.0.dist-info/top_level.txt,sha256=yANZw83INt28Jo6YgJkVlSdBlkOTio6HZeeO2D8V_iM,21 PK"hFHQ[ cmsplugin_googleplus/__init__.pyPK}G4~ Tcmsplugin_googleplus/models.pyPKLU}G>"i cmsplugin_googleplus/googleplus.pyPK}G6#V!cmsplugin_googleplus/cms_plugins.pyPKS}G간V V B2cmsplugin_googleplus/globals.pyPK|}GB?cmsplugin_googleplus/conf.pyPKeFH^U__4Acmsplugin_googleplus/locale/pl/LC_MESSAGES/django.poPK8fFHU  4`cmsplugin_googleplus/locale/pl/LC_MESSAGES/django.moPKW}Gu<<4xcmsplugin_googleplus/locale/en/LC_MESSAGES/django.poPK8fFH7 zz4cmsplugin_googleplus/locale/en/LC_MESSAGES/django.moPKBnG4Wcmsplugin_googleplus/locale/it/LC_MESSAGES/django.poPK8fFH0!_ 4cmsplugin_googleplus/locale/it/LC_MESSAGES/django.moPKڂG`88Jcmsplugin_googleplus/templates/cmsplugin_googleplus/twitter_bootstrap.htmlPKrGS= /<cmsplugin_googleplus/migrations/0001_initial.pyPKrG+cmsplugin_googleplus/migrations/__init__.pyPK}GgXX:Zcmsplugin_googleplus/migrations/0002_add_google_api_key.pyPKIS}G& cmsplugin_googleplus/tests/__init__.pyPKS}G;X-Ncmsplugin_googleplus/tests/test_googleplus.pyPKT}G'.bcmsplugin_googleplus/tests/test_cms_plugins.pyPKnR}GX )cmsplugin_googleplus/tests/test_models.pyPKT}G_ " cmsplugin_googleplus/tests/base.pyPKrG , ,/cmsplugin_googleplus/tests/data/activities.jsonPKR}G62=cmsplugin_googleplus/tests/example_project/__init__.pyPKT}GR{{2=cmsplugin_googleplus/tests/example_project/urls.pyPKDkFHӰKK4Q@cmsplugin_googleplus-0.6.0.dist-info/DESCRIPTION.rstPKDkFHde|2Hcmsplugin_googleplus-0.6.0.dist-info/metadata.jsonPK@kFHmq..-Mcmsplugin_googleplus-0.6.0.dist-info/pbr.jsonPK@kFHxP2:Ncmsplugin_googleplus-0.6.0.dist-info/top_level.txtPKDkFH>nn*Ncmsplugin_googleplus-0.6.0.dist-info/WHEELPKDkFHy]  -UOcmsplugin_googleplus-0.6.0.dist-info/METADATAPKDkFH!< < +[cmsplugin_googleplus-0.6.0.dist-info/RECORDPK 7h