{"id":8476,"date":"2015-06-15T08:30:06","date_gmt":"2015-06-15T06:30:06","guid":{"rendered":"http:\/\/rainbowbreeze.it\/?p=8476"},"modified":"2015-06-15T01:59:36","modified_gmt":"2015-06-14T23:59:36","slug":"identify-your-twitter-followings-older-that-4-months","status":"publish","type":"post","link":"https:\/\/rainbowbreeze.it\/wordpress\/identify-your-twitter-followings-older-that-4-months\/","title":{"rendered":"Identify your Twitter followings older that 4 months"},"content":{"rendered":"<p>Spring is all\u00a0about cleaning, the saying goes, so why don&#8217;t apply the same principle also the the accounts I follow on Twitter?\u00a0Why? Because I would like to maintain their number under 400 and because I\u00a0would like to grow my very limited Python skills.<\/p>\n<p>With the help of\u00a0<a href=\"https:\/\/github.com\/Mezgrman\/TweetPony\">TweetPony<\/a>\u00a0(among the many), the task was pretty straightforward. Final result is a <a href=\"https:\/\/gist.github.com\/rainbowbreeze\/847a2fa9cf8008707734\">simple script<\/a> that checks for the people I follow, verifies their last tweet date and alert me if it is older than four months.<\/p>\n<h4>Configure the Python environment (Ubuntu 14.04 Trusty)<\/h4>\n<p>I don&#8217;t want to pollute my system-wide Python installation with libraries and dependencies related to a single project, so I created a <a href=\"http:\/\/docs.python-guide.org\/en\/latest\/dev\/virtualenvs\/\">virtual environment<\/a>. Still not a master on that, so forgive my errors:<\/p>\n<pre lang=\"bash\">\r\napt-get install python-pip\r\nsudo pip install virtualenv\r\ncd %projectdir%\r\nvirtualenv build_dir\r\nsource build_dir\/bin\/activate\r\n<\/pre>\n<p>From now ongoing, all the pip commands will be execute inside the <em>(build_dir)<\/em> virtualdev, and not at system-wide level. Time to install the TweetPony library:<\/p>\n<pre lang=\"bash\">\r\nsudo pip install tweetpony\r\n<\/pre>\n<p>Once installed, I tried some examples from the <a href=\"https:\/\/github.com\/Mezgrman\/TweetPony\/tree\/master\/examples\">GitHub repo<\/a>, to check if it worked. And yes, it did (even without api key and permission, see later), but a boring console message appeared every time the script made a call to Twitter API, caused probably by the old Python 2.7.6 version or libs I was using:<\/p>\n<pre>\r\nInsecurePlatformWarning: A true SSLContext object is not available. This prevents urllib3 from configuring SSL appropriately and may cause certain SSL connections to fail. For more information, see https:\/\/urllib3.readthedocs.org\/en\/latest\/security.html#insecureplatformwarning.\r\n  InsecurePlatformWarning\r\n<\/pre>\n<p>In order to <a href=\"https:\/\/urllib3.readthedocs.org\/en\/latest\/security.html#insecureplatformwarning\">solve it<\/a>, I installed some dev libraries required to compile some other Python libraries (again, inside the virtualenv only)<\/p>\n<pre lang=\"bash\">\r\nsudo apt-get install libssl-dev\r\nsudo apt-get install libfii-dev\r\npip install cryptography\r\npip install pyopenssl ndg-httpsclient pyasn1\r\npip install urllib3\r\n<\/pre>\n<p>and added these lines of code at the beginning of the main function of the script, before any Twitter API call:<\/p>\n<pre lang=\"python\">\r\nimport urllib3.contrib.pyopenssl\r\nurllib3.contrib.pyopenssl.inject_into_urllib3()\r\n<\/pre>\n<p>They made the trick! But, as I said, probably you may not need all of these.<\/p>\n<h4>The script<\/h4>\n<p>The script itself it&#8217;s pretty simple. I took the basic code to create the TweetPony API object from the <a href=\"https:\/\/github.com\/Mezgrman\/TweetPony\/tree\/master\/examples\">repo&#8217;s example folder<\/a> and I was able to get user&#8217;s friends_id (the account the user follows). Then, cycling thru each one, I checked the status of that friend, watching for last tweet date. Some cornercases management (like private tweets or no tweets at all) and voila&#8217;, I had all I needed.<\/p>\n<p>Regarding authentication, all Twitter&#8217;s libraries require a consumer key and consumer secret to work, in addition to an OAuth access_token and access_token_secret. What made me preferred TweetPony to other libs, like <a href=\"https:\/\/github.com\/tweepy\/tweepy\">tweepy<\/a> or <a href=\"https:\/\/github.com\/bear\/python-twitter\">python-twitter<\/a>, was that TweetPony doesn&#8217;t required anything. Test consumer key and secret are gently embedded into the lib source, while OAuth tokens are created on the fly for you and persisted over a file, <em>.auth_data.json<\/em>. To use new credentials, simply delete the file and add somewhere, at the beginning of your code, these two lines, with key and secret obtained from Twitter Dev Console:<\/p>\n<pre lang=\"python\">\r\ntweetpony.CONSUMER_KEY = 'xxxx'\r\ntweetpony.CONSUMER_SECRET = 'xxxxx'\r\n<\/pre>\n<p>Final consideration about Twitter API usage: there is <a href=\"https:\/\/dev.twitter.com\/rest\/public\/rate-limiting\">a limit<\/a> of 180 calls every 15 minutes, so I added a sleep after every check. Slow, but it worked with my 500+ followers :)<br \/>\n<!--more--><br \/>\nHere the complete script (and the <a href=\"https:\/\/gist.github.com\/rainbowbreeze\/847a2fa9cf8008707734\">gist<\/a> too):<\/p>\n<pre lang=\"python\">\r\nimport tweetpony\r\nfrom datetime import timedelta, datetime\r\nimport urllib3.contrib.pyopenssl\r\nimport time\r\nimport json\r\nimport os\r\n\r\n\r\ndef authenticate():\r\n    try:\r\n        api = tweetpony.API(tweetpony.CONSUMER_KEY, tweetpony.CONSUMER_SECRET)\r\n        url = api.get_auth_url()\r\n        print(\"Visit this URL to obtain your verification code: %s\" % url)\r\n        verifier = raw_input(\"Input your code: \")\r\n        api.authenticate(verifier)\r\n    except tweetpony.APIError as err:\r\n        print(\"Oh no! You could not be authenticated. Twitter returned error #%i and said: %s\"\r\n              % (err.code, err.description))\r\n    else:\r\n        auth_data = {'access_token': api.access_token, 'access_token_secret': api.access_token_secret}\r\n        with open(os.path.join(os.path.dirname(os.path.realpath(__file__)), \".auth_data.json\"), 'w') as f:\r\n            f.write(json.dumps(auth_data))\r\n        print(\"Hello, @%s! You have been authenticated. You can now run the other example scripts without having to \"\r\n              \"authenticate every time.\" % api.user.screen_name)\r\n\r\n\r\ndef get_api():\r\n    if not os.path.exists(os.path.join(os.path.dirname(os.path.realpath(__file__)), \".auth_data.json\")):\r\n        authenticate()\r\n    with open(os.path.join(os.path.dirname(os.path.realpath(__file__)), \".auth_data.json\"), 'r') as f:\r\n        auth_data = json.loads(f.read())\r\n    try:\r\n        api = tweetpony.API(tweetpony.CONSUMER_KEY, tweetpony.CONSUMER_SECRET, auth_data['access_token'],\r\n                            auth_data['access_token_secret'])\r\n    except tweetpony.APIError as err:\r\n        print(\"Oh no! You could not be authenticated. Twitter returned error #%i and said: %s\" % (err.code, err.description))\r\n    else:\r\n        return api\r\n    return False\r\n\r\n\r\ndef find_inactive_friends(api, screen_name):\r\n    \"\"\"\r\n    Prints all the followers of a given user which twitted, last time, more than 4 months ago\r\n\r\n    :return a list of these accounts\r\n    \"\"\"\r\n    print(\"Searching for followers that have twitted last time more than 4 months ago for user \" + screen_name)\r\n\r\n    inactive_friends = []\r\n    four_months_ago = datetime.now() - timedelta(weeks=16)\r\n\r\n    try:\r\n        # Find all the followers of the given user\r\n        all_friends_ids = api.friends_ids(screen_name=screen_name)\r\n        total_friends = len(all_friends_ids)\r\n        print('Total friends %d' % total_friends)\r\n        counter = 0\r\n        for friend_id in all_friends_ids:\r\n            counter += 1\r\n            # Get follower information\r\n            friend = api.get_user(user_id=friend_id)\r\n\r\n            log_progress = '   (%d\/%d) ' % (counter, total_friends)\r\n            log_begin = log_progress + friend.name + ' (' + friend.screen_name + ') '\r\n            # Protected tweets, no status property at all\r\n            if not hasattr(friend, 'status'):\r\n                print(log_begin + 'has private tweets')\r\n            # No status, never twitted -> old or fake user\r\n            if friend.status is None:\r\n                inactive_friends.append(friend_id)\r\n                print(log_begin + 'never twitted')\r\n            # Finally a proper user :)\r\n            else:\r\n                status_date = friend.status.created_at\r\n                if status_date < four_months_ago:\r\n                    inactive_friends.append(friend_id)\r\n                    print(log_begin + 'may be old, tweeted last time on ' + unicode(status_date) + ' - Check https:\/\/twitter.com\/' + friend.screen_name)\r\n                else:\r\n                    if 0 == counter % 5:\r\n                        print(log_progress + 'and counting...')\r\n                    #print('   ' + log_begin + 'seems OK, last tweet was on ' + unicode(status_date))\r\n\r\n            # Try to avoid Twitter error #88: Rate limit exceeded\r\n            #  180 request every 15 minutes, one each 5 seconds\r\n            time.sleep(5)\r\n\r\n    except tweetpony.APIError as err:\r\n        print(\"Oh no! Twitter returned error #%i and said: %s\" % (err.code, err.description))\r\n    except Exception as err:\r\n        print(' Analysing follower id %s returned error: %s' % (unicode(friend_id), err))\r\n\r\n    return inactive_friends\r\n\r\n\r\ndef main():\r\n    # Removes InsecurePlatformWarning\r\n    urllib3.contrib.pyopenssl.inject_into_urllib3()\r\n    # Custom Twitter API keys, change with yours!\r\n    tweetpony.CONSUMER_KEY = 'xxxxx'\r\n    tweetpony.CONSUMER_SECRET = 'xxxxxx'\r\n\r\n    api = get_api()\r\n    if not api:\r\n        return\r\n\r\n    username = raw_input(\"Username to lookup (leave blank for your own): \").strip()\r\n    if username == \"\":\r\n        username = api.user.screen_name\r\n\r\n    inactive_friends = find_inactive_friends(api, username)\r\n    print('Find %d' % len(inactive_friends))\r\n\r\n\r\nif __name__ == \"__main__\":\r\n    main()\r\n<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>Spring is all\u00a0about cleaning, the saying goes, so why don&#8217;t apply the same principle also the the accounts I follow on Twitter?\u00a0Why? Because I would like to maintain their number under 400 and because I\u00a0would like to grow my very limited Python skills. With the help of\u00a0TweetPony\u00a0(among the many), the task was pretty straightforward. Final &hellip; <a href=\"https:\/\/rainbowbreeze.it\/wordpress\/identify-your-twitter-followings-older-that-4-months\/\" class=\"more-link\">Continue reading <span class=\"screen-reader-text\">Identify your Twitter followings older that 4 months<\/span> <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"activitypub_content_warning":"","activitypub_content_visibility":"","activitypub_max_image_attachments":3,"activitypub_interaction_policy_quote":"anyone","activitypub_status":"","footnotes":""},"categories":[520],"tags":[569],"class_list":["post-8476","post","type-post","status-publish","format-standard","hentry","category-dev","tag-python"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.6 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Identify your Twitter followings older that 4 months - Rainbowbreeze<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/rainbowbreeze.it\/identify-your-twitter-followings-older-that-4-months\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Identify your Twitter followings older that 4 months - Rainbowbreeze\" \/>\n<meta property=\"og:description\" content=\"Spring is all\u00a0about cleaning, the saying goes, so why don&#8217;t apply the same principle also the the accounts I follow on Twitter?\u00a0Why? Because I would like to maintain their number under 400 and because I\u00a0would like to grow my very limited Python skills. With the help of\u00a0TweetPony\u00a0(among the many), the task was pretty straightforward. Final &hellip; Continue reading Identify your Twitter followings older that 4 months &rarr;\" \/>\n<meta property=\"og:url\" content=\"https:\/\/rainbowbreeze.it\/identify-your-twitter-followings-older-that-4-months\/\" \/>\n<meta property=\"og:site_name\" content=\"Rainbowbreeze\" \/>\n<meta property=\"article:published_time\" content=\"2015-06-15T06:30:06+00:00\" \/>\n<meta name=\"author\" content=\"Alfredo\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@rainbowbreeze\" \/>\n<meta name=\"twitter:site\" content=\"@rainbowbreeze\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Alfredo\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"6 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/rainbowbreeze.it\\\/identify-your-twitter-followings-older-that-4-months\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/rainbowbreeze.it\\\/identify-your-twitter-followings-older-that-4-months\\\/\"},\"author\":{\"name\":\"Alfredo\",\"@id\":\"https:\\\/\\\/rainbowbreeze.it\\\/#\\\/schema\\\/person\\\/00e63c64a3939938a7467e3aaf54f4cf\"},\"headline\":\"Identify your Twitter followings older that 4 months\",\"datePublished\":\"2015-06-15T06:30:06+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/rainbowbreeze.it\\\/identify-your-twitter-followings-older-that-4-months\\\/\"},\"wordCount\":492,\"commentCount\":1,\"publisher\":{\"@id\":\"https:\\\/\\\/rainbowbreeze.it\\\/#\\\/schema\\\/person\\\/00e63c64a3939938a7467e3aaf54f4cf\"},\"keywords\":[\"Python\"],\"articleSection\":[\"Development\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/rainbowbreeze.it\\\/identify-your-twitter-followings-older-that-4-months\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/rainbowbreeze.it\\\/identify-your-twitter-followings-older-that-4-months\\\/\",\"url\":\"https:\\\/\\\/rainbowbreeze.it\\\/identify-your-twitter-followings-older-that-4-months\\\/\",\"name\":\"Identify your Twitter followings older that 4 months - Rainbowbreeze\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/rainbowbreeze.it\\\/#website\"},\"datePublished\":\"2015-06-15T06:30:06+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/rainbowbreeze.it\\\/identify-your-twitter-followings-older-that-4-months\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/rainbowbreeze.it\\\/identify-your-twitter-followings-older-that-4-months\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/rainbowbreeze.it\\\/identify-your-twitter-followings-older-that-4-months\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/rainbowbreeze.it\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Identify your Twitter followings older that 4 months\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/rainbowbreeze.it\\\/#website\",\"url\":\"https:\\\/\\\/rainbowbreeze.it\\\/\",\"name\":\"Rainbowbreeze\",\"description\":\"Alfredo Morresi&#039;s digital harbor\",\"publisher\":{\"@id\":\"https:\\\/\\\/rainbowbreeze.it\\\/#\\\/schema\\\/person\\\/00e63c64a3939938a7467e3aaf54f4cf\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/rainbowbreeze.it\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\\\/\\\/rainbowbreeze.it\\\/#\\\/schema\\\/person\\\/00e63c64a3939938a7467e3aaf54f4cf\",\"name\":\"Alfredo\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/rainbowbreeze.it\\\/wordpress\\\/wp-content\\\/uploads\\\/2021\\\/03\\\/rainbowbreeze_profile_700px.jpg\",\"url\":\"https:\\\/\\\/rainbowbreeze.it\\\/wordpress\\\/wp-content\\\/uploads\\\/2021\\\/03\\\/rainbowbreeze_profile_700px.jpg\",\"contentUrl\":\"https:\\\/\\\/rainbowbreeze.it\\\/wordpress\\\/wp-content\\\/uploads\\\/2021\\\/03\\\/rainbowbreeze_profile_700px.jpg\",\"width\":700,\"height\":700,\"caption\":\"Alfredo\"},\"logo\":{\"@id\":\"https:\\\/\\\/rainbowbreeze.it\\\/wordpress\\\/wp-content\\\/uploads\\\/2021\\\/03\\\/rainbowbreeze_profile_700px.jpg\"},\"description\":\"79ers, Italian, with a passion for creating environments in which great ideas can happen and people feel empowered, thanks to community dynamics and technological innovation. I also love nature, open-source, running on the beach, snowboarding and Tiramisu\u2019\",\"sameAs\":[\"https:\\\/\\\/rainbowbreeze.it\\\/\",\"https:\\\/\\\/www.instagram.com\\\/rainbowbreez3\\\/\",\"https:\\\/\\\/linkedin.com\\\/in\\\/alfredomorresi\",\"https:\\\/\\\/x.com\\\/rainbowbreeze\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Identify your Twitter followings older that 4 months - Rainbowbreeze","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/rainbowbreeze.it\/identify-your-twitter-followings-older-that-4-months\/","og_locale":"en_US","og_type":"article","og_title":"Identify your Twitter followings older that 4 months - Rainbowbreeze","og_description":"Spring is all\u00a0about cleaning, the saying goes, so why don&#8217;t apply the same principle also the the accounts I follow on Twitter?\u00a0Why? Because I would like to maintain their number under 400 and because I\u00a0would like to grow my very limited Python skills. With the help of\u00a0TweetPony\u00a0(among the many), the task was pretty straightforward. Final &hellip; Continue reading Identify your Twitter followings older that 4 months &rarr;","og_url":"https:\/\/rainbowbreeze.it\/identify-your-twitter-followings-older-that-4-months\/","og_site_name":"Rainbowbreeze","article_published_time":"2015-06-15T06:30:06+00:00","author":"Alfredo","twitter_card":"summary_large_image","twitter_creator":"@rainbowbreeze","twitter_site":"@rainbowbreeze","twitter_misc":{"Written by":"Alfredo","Est. reading time":"6 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/rainbowbreeze.it\/identify-your-twitter-followings-older-that-4-months\/#article","isPartOf":{"@id":"https:\/\/rainbowbreeze.it\/identify-your-twitter-followings-older-that-4-months\/"},"author":{"name":"Alfredo","@id":"https:\/\/rainbowbreeze.it\/#\/schema\/person\/00e63c64a3939938a7467e3aaf54f4cf"},"headline":"Identify your Twitter followings older that 4 months","datePublished":"2015-06-15T06:30:06+00:00","mainEntityOfPage":{"@id":"https:\/\/rainbowbreeze.it\/identify-your-twitter-followings-older-that-4-months\/"},"wordCount":492,"commentCount":1,"publisher":{"@id":"https:\/\/rainbowbreeze.it\/#\/schema\/person\/00e63c64a3939938a7467e3aaf54f4cf"},"keywords":["Python"],"articleSection":["Development"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/rainbowbreeze.it\/identify-your-twitter-followings-older-that-4-months\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/rainbowbreeze.it\/identify-your-twitter-followings-older-that-4-months\/","url":"https:\/\/rainbowbreeze.it\/identify-your-twitter-followings-older-that-4-months\/","name":"Identify your Twitter followings older that 4 months - Rainbowbreeze","isPartOf":{"@id":"https:\/\/rainbowbreeze.it\/#website"},"datePublished":"2015-06-15T06:30:06+00:00","breadcrumb":{"@id":"https:\/\/rainbowbreeze.it\/identify-your-twitter-followings-older-that-4-months\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/rainbowbreeze.it\/identify-your-twitter-followings-older-that-4-months\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/rainbowbreeze.it\/identify-your-twitter-followings-older-that-4-months\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/rainbowbreeze.it\/"},{"@type":"ListItem","position":2,"name":"Identify your Twitter followings older that 4 months"}]},{"@type":"WebSite","@id":"https:\/\/rainbowbreeze.it\/#website","url":"https:\/\/rainbowbreeze.it\/","name":"Rainbowbreeze","description":"Alfredo Morresi&#039;s digital harbor","publisher":{"@id":"https:\/\/rainbowbreeze.it\/#\/schema\/person\/00e63c64a3939938a7467e3aaf54f4cf"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/rainbowbreeze.it\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":["Person","Organization"],"@id":"https:\/\/rainbowbreeze.it\/#\/schema\/person\/00e63c64a3939938a7467e3aaf54f4cf","name":"Alfredo","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/rainbowbreeze.it\/wordpress\/wp-content\/uploads\/2021\/03\/rainbowbreeze_profile_700px.jpg","url":"https:\/\/rainbowbreeze.it\/wordpress\/wp-content\/uploads\/2021\/03\/rainbowbreeze_profile_700px.jpg","contentUrl":"https:\/\/rainbowbreeze.it\/wordpress\/wp-content\/uploads\/2021\/03\/rainbowbreeze_profile_700px.jpg","width":700,"height":700,"caption":"Alfredo"},"logo":{"@id":"https:\/\/rainbowbreeze.it\/wordpress\/wp-content\/uploads\/2021\/03\/rainbowbreeze_profile_700px.jpg"},"description":"79ers, Italian, with a passion for creating environments in which great ideas can happen and people feel empowered, thanks to community dynamics and technological innovation. I also love nature, open-source, running on the beach, snowboarding and Tiramisu\u2019","sameAs":["https:\/\/rainbowbreeze.it\/","https:\/\/www.instagram.com\/rainbowbreez3\/","https:\/\/linkedin.com\/in\/alfredomorresi","https:\/\/x.com\/rainbowbreeze"]}]}},"_links":{"self":[{"href":"https:\/\/rainbowbreeze.it\/wordpress\/wp-json\/wp\/v2\/posts\/8476","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/rainbowbreeze.it\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/rainbowbreeze.it\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/rainbowbreeze.it\/wordpress\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/rainbowbreeze.it\/wordpress\/wp-json\/wp\/v2\/comments?post=8476"}],"version-history":[{"count":0,"href":"https:\/\/rainbowbreeze.it\/wordpress\/wp-json\/wp\/v2\/posts\/8476\/revisions"}],"wp:attachment":[{"href":"https:\/\/rainbowbreeze.it\/wordpress\/wp-json\/wp\/v2\/media?parent=8476"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/rainbowbreeze.it\/wordpress\/wp-json\/wp\/v2\/categories?post=8476"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/rainbowbreeze.it\/wordpress\/wp-json\/wp\/v2\/tags?post=8476"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}