{"id":5625,"date":"2013-02-22T20:42:24","date_gmt":"2013-02-22T20:42:24","guid":{"rendered":"http:\/\/zerokidz.com\/ideas\/?p=5625"},"modified":"2014-06-22T13:42:55","modified_gmt":"2014-06-22T17:42:55","slug":"twitter-streaming-from-php-to-max","status":"publish","type":"post","link":"https:\/\/reactivemusic.net\/?p=5625","title":{"rendered":"Twitter streaming from php to Max"},"content":{"rendered":"<p>update 6\/2014 &#8211; This project is part of the Internet sensors projects:\u00a0<a href=\"https:\/\/reactivemusic.net\/?p=5859\">https:\/\/reactivemusic.net\/?p=5859<\/a>. Check the link for current versions.<\/p>\n<div class=\"panel\">\n<p>original post<\/p>\n<\/div>\n<h5>notes<\/h5>\n<p>Got a test patch running today which breaks out tweets (in php and curl) and sends them to Max via Osc.<\/p>\n<p>(update) Have parsed data to remove \u00a0hyperlinks and Twitter symbols.<\/p>\n<p>It took some tweaking of global variables in php &#8211; and probably would be better written using classes (as in this example:\u00a0<a href=\"http:\/\/stackoverflow.com\/questions\/1397234\/php-curl-read-incrementally\">http:\/\/stackoverflow.com\/questions\/1397234\/php-curl-read-incrementally<\/a>\u00a0&#8211; see post from GZipp.<\/p>\n<p>Max patch: tkzic\/max teaching examples\/twitter-php-streamer1.maxpat<\/p>\n<p><a href=\"https:\/\/reactivemusic.net\/wp-content\/uploads\/2013\/02\/Screen-Shot-2013-02-22-at-3.39.04-PM.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-5626\" title=\"Screen Shot 2013-02-22 at 3.39.04 PM\" src=\"https:\/\/reactivemusic.net\/wp-content\/uploads\/2013\/02\/Screen-Shot-2013-02-22-at-3.39.04-PM-300x69.png\" alt=\"\" width=\"300\" height=\"69\" srcset=\"https:\/\/reactivemusic.net\/wp-content\/uploads\/2013\/02\/Screen-Shot-2013-02-22-at-3.39.04-PM-300x69.png 300w, https:\/\/reactivemusic.net\/wp-content\/uploads\/2013\/02\/Screen-Shot-2013-02-22-at-3.39.04-PM-500x116.png 500w, https:\/\/reactivemusic.net\/wp-content\/uploads\/2013\/02\/Screen-Shot-2013-02-22-at-3.39.04-PM.png 762w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><\/p>\n<p>php code: twitterStreamMax.php<\/p>\n<pre class=\"brush: php; gutter: true\">&lt;?php\r\n\r\n\/\/ max-osc-play.php\r\n\/\/\r\n\/\/\tcollection of php OSC code from Max stock-market thing\r\n\/\/\r\n\r\ninclude &#039;udp.php&#039;;\t\t\/\/ udp data sending stuff\r\n\r\n$DESTINATION = &#039;localhost&#039;;\r\n$SENDPORT = &#039;7400&#039;;\r\n$RECVPORT = &#039;7401&#039;;\r\n\r\n\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\r\n\r\n\t$USERNAME = &#039;username&#039;;\r\n\t$PASSWORD = &#039;password&#039;;\r\n\t$QUERY    = &#039;cats&#039;;\t\t\/\/ the hashtag # is optional\r\n\r\n\t\/\/ these variables are defined as global so they can be used inside the write callback function\r\n\tglobal $osc;\r\n\tglobal $kount;\r\n\r\n\t\/\/ initialize OSC\r\n\t$osc = new OSCClient();  \/\/ OSC object\r\n\t$osc-&gt;set_destination($DESTINATION, $SENDPORT);\r\n\r\n\t\/\/ This amazing program uses curl to access the Twitter streaming API and breaks the data\r\n\t\/\/ into individual tweets which can be saved in a database, sent out via OSC, or whatever\r\n\t\/\/\r\n\r\n\t\/**\r\n\t * Called every time a chunk of data is read, this will be a json encoded message\r\n\t * \r\n\t * @param resource $handle The curl handle\r\n\t * @param string   $data   The data chunk (json message)\r\n\t *\/\r\n\tfunction writeCallback($handle, $data)\r\n\t{\r\n\t    \/*\r\n\t    echo &quot;-----------------------------------------------------------\\n&quot;;\r\n\t    echo $data;\r\n\t    echo &quot;-----------------------------------------------------------\\n&quot;;\r\n\t    *\/\r\n\r\n\t\t$maxdata = &quot;\/tweet&quot; ;\t\t\t\t\/\/ header - begin   \r\n\t\tglobal $kount;\t\t\t\t\t\/\/ test counter\r\n\t\tglobal $osc;\t\t\t\t\t\t\/\/ osc object\r\n\r\n\t    $json = json_decode($data);\r\n\t    if (isset($json-&gt;user) &amp;&amp; isset($json-&gt;text)) {\r\n\r\n\t\t\t\/\/ here we have a single tweet\r\n\t        echo &quot;@{$json-&gt;user-&gt;screen_name}: {$json-&gt;text}\\n\\n&quot;;\r\n\r\n\t\t\t\/\/ do some cleaning up...\r\n\t\t\t\/\/ remove URL&#039;s\r\n\t\t\t$s = $json-&gt;text;\t\t\/\/ raw tweet text\r\n\r\n\t\t\t\/\/ ok now need to do the same thing below for URL,s RT&#039;s @&#039;s etc., \r\n\t\t\t\/\/ and then remove redundant spaces\t\r\n\t\t\t\/* example\r\n\t\t\tDepending on how greedy you&#039;d like to be, you could do something like:\r\n\r\n\t\t\t$pg_url = preg_replace(&quot;\/[^a-zA-Z 0-9]+\/&quot;, &quot; &quot;, $pg_url);\r\n\r\n\t\t\tThis will replace anything that isn&#039;t a letter, number or space\r\n\r\n\t\t\t*\/\t\t\r\n\r\n\t\t\t\/\/ display all hashtags and their indices\r\n\t\t\tforeach( $json-&gt;entities-&gt;hashtags as $obj )\r\n\t\t\t{\r\n\t\t\t  echo &quot;#:{$obj-&gt;text}\\n&quot;;\t\t\/\/ display hashtag\r\n\t\t\t  \/\/ get rid of the hashtag\r\n\t\t\t \t\/\/ note: this gets rid of all hashtags, which could obscure the meaning of the tweet, if\r\n\t\t\t\t\/\/ the hashtag is used inside a sentence like: &quot;my #cat is purple&quot; - would be changed to: &quot;my is purple&quot;\r\n\t\t\t\t\/\/ so we could use some intelligent parsing here...\r\n\r\n\t\t\t\/\/  $s = str_replace(&quot;#{$obj-&gt;text}&quot;, &quot;&quot;, $s );\r\n\r\n\t\t\t\/\/ this is a more benign approach, which leaves the word but removes the #\r\n\r\n\t\t\t$s = str_replace(&quot;#{$obj-&gt;text}&quot;, &quot;{$obj-&gt;text}&quot;, $s );\r\n\r\n\t\t\t}\r\n\r\n\t\t\tforeach( $json-&gt;entities-&gt;urls as $obj )\r\n\t\t\t{\r\n\t\t\t  echo &quot;U:{$obj-&gt;url}\\n&quot;;\t\t\/\/ display url\t\t\t\r\n\t\t\t  $s = str_replace(&quot;{$obj-&gt;url}&quot;, &quot;&quot;, $s );   \/\/ get rid of the url\t\t\r\n\t\t\t}\r\n\r\n\t\t\tforeach( $json-&gt;entities-&gt;user_mentions as $obj )\r\n\t\t\t{\r\n\t\t\t\techo &quot;@:{$obj-&gt;screen_name}\\n&quot;;\t\t\/\/ display \t\t\t\r\n\t\t\t\t$s = str_replace(&quot;RT @{$obj-&gt;screen_name}:&quot;, &quot;&quot;, $s );   \/\/ get rid of re-tweets\r\n\t\t\t\t$s = str_replace(&quot;@{$obj-&gt;screen_name}:&quot;, &quot;&quot;, $s );   \/\/ get rid of other user mentions\r\n\t\t\t\t$s = str_replace(&quot;@{$obj-&gt;screen_name}&quot;, &quot;&quot;, $s );   \/\/ get rid of other user mentions\t\t\r\n\t\t\t}\r\n\r\n\t\t\t\/\/ $s = str_replace(&quot;RT &quot;, &quot;&quot;, $s );   \/\/ get rid of RT&#039;s (re-tweet indicators)\r\n\r\n\t\t\t\/\/ $s = preg_replace( &#039;\/[^[:print:]]\/&#039;, &#039;&#039;,$s); \/\/ remove non printable characters\r\n\r\n\t\t\t$s = htmlspecialchars_decode($s);\t\t\/\/ decode stuff like &amp;gt;\r\n\r\n\t\t\t$s = preg_replace(&#039;\/[\\x00-\\x08\\x0B\\x0C\\x0E-\\x1F\\x80-\\x9F]\/u&#039;, &#039;&#039;, $s); \/\/ get rid of unicode junk\r\n\r\n\t\t\t$s = preg_replace(&#039;\/[^(\\x20-\\x7F)]*\/&#039;,&#039;&#039;, $s);\t\t\/\/ get rid of other non printable stuff\r\n\r\n\t\t\t$s = preg_replace(&#039;!\\s+!&#039;, &#039; &#039;, $s);\t\/\/ remove redundant white space\r\n\r\n\t\t\techo &quot;revised tweet: {$s}\\n&quot;;\r\n\r\n\t\t\t$maxdata = &quot;\/tweet &quot; . &quot;{$json-&gt;text}&quot;;\r\n\t\t\t\/\/ $maxdata = $maxdata . &quot; &quot; . $kount++;\r\n\t\t   \t$osc-&gt;send(new OSCMessage($maxdata));\r\n\r\n\t    }\r\n\r\n\t    return strlen($data);\r\n\t}\r\n\r\n\/\/ initialize OSC \r\n\r\n\/\/ initialize curl\r\n\r\n\t$ch = curl_init();\r\n\r\n\tcurl_setopt($ch, CURLOPT_URL, &#039;https:\/\/stream.twitter.com\/1\/statuses\/filter.json?track=&#039; . urlencode($QUERY));\r\n\tcurl_setopt($ch, CURLOPT_USERPWD, &quot;$USERNAME:$PASSWORD&quot;);\r\n\tcurl_setopt($ch, CURLOPT_WRITEFUNCTION, &#039;writeCallback&#039;);\r\n\tcurl_setopt($ch, CURLOPT_TIMEOUT, 20); \/\/ disconnect after 20 seconds for testing\r\n\tcurl_setopt($ch, CURLOPT_VERBOSE, 1);  \/\/ debugging\r\n\tcurl_setopt($ch, CURLOPT_ENCODING,  &#039;gzip, deflate&#039;); \/\/ req&#039;d to get gzip\r\n\tcurl_setopt($ch, CURLOPT_USERAGENT, &#039;tstreamer\/1.0&#039;); \/\/ req&#039;d to get gzip\r\n\r\n\tcurl_exec($ch); \/\/ commence streaming\r\n\r\n\t$info = curl_getinfo($ch);\r\n\r\n\tvar_dump($info);\r\n\r\n?&gt;<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>update 6\/2014 &#8211; This project is part of the Internet sensors projects:\u00a0https:\/\/reactivemusic.net\/?p=5859. Check the link for current versions. original post notes Got a test patch running today which breaks out tweets (in php and curl) and sends them to Max via Osc. (update) Have parsed data to remove \u00a0hyperlinks and Twitter symbols. It took some &hellip; <\/p>\n<p class=\"link-more\"><a href=\"https:\/\/reactivemusic.net\/?p=5625\" class=\"more-link\">Continue reading<span class=\"screen-reader-text\"> &#8220;Twitter streaming from php to Max&#8221;<\/span><\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_coblocks_attr":"","_coblocks_dimensions":"","_coblocks_responsive_height":"","_coblocks_accordion_ie_support":"","footnotes":""},"categories":[1],"tags":[161,345,105,196,190,136],"class_list":["post-5625","post","type-post","status-publish","format-standard","hentry","category-uncategorized","tag-api","tag-maxmsp","tag-osc","tag-php","tag-portfolio","tag-twitter"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Twitter streaming from php to Max - reactive music<\/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:\/\/reactivemusic.net\/?p=5625\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Twitter streaming from php to Max - reactive music\" \/>\n<meta property=\"og:description\" content=\"update 6\/2014 &#8211; This project is part of the Internet sensors projects:\u00a0https:\/\/reactivemusic.net\/?p=5859. Check the link for current versions. original post notes Got a test patch running today which breaks out tweets (in php and curl) and sends them to Max via Osc. (update) Have parsed data to remove \u00a0hyperlinks and Twitter symbols. It took some &hellip; Continue reading &quot;Twitter streaming from php to Max&quot;\" \/>\n<meta property=\"og:url\" content=\"https:\/\/reactivemusic.net\/?p=5625\" \/>\n<meta property=\"og:site_name\" content=\"reactive music\" \/>\n<meta property=\"article:published_time\" content=\"2013-02-22T20:42:24+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2014-06-22T17:42:55+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/reactivemusic.net\/wp-content\/uploads\/2013\/02\/Screen-Shot-2013-02-22-at-3.39.04-PM-300x69.png\" \/>\n<meta name=\"author\" content=\"Tom Zicarelli\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Tom Zicarelli\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"4 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/reactivemusic.net\\\/?p=5625#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/reactivemusic.net\\\/?p=5625\"},\"author\":{\"name\":\"Tom Zicarelli\",\"@id\":\"https:\\\/\\\/reactivemusic.net\\\/#\\\/schema\\\/person\\\/56224d281582df7e5518e037ca63e571\"},\"headline\":\"Twitter streaming from php to Max\",\"datePublished\":\"2013-02-22T20:42:24+00:00\",\"dateModified\":\"2014-06-22T17:42:55+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/reactivemusic.net\\\/?p=5625\"},\"wordCount\":105,\"image\":{\"@id\":\"https:\\\/\\\/reactivemusic.net\\\/?p=5625#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/reactivemusic.net\\\/wp-content\\\/uploads\\\/2013\\\/02\\\/Screen-Shot-2013-02-22-at-3.39.04-PM-300x69.png\",\"keywords\":[\"API\",\"Max\\\/MSP\",\"OSC\",\"php\",\"portfolio\",\"Twitter\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/reactivemusic.net\\\/?p=5625\",\"url\":\"https:\\\/\\\/reactivemusic.net\\\/?p=5625\",\"name\":\"Twitter streaming from php to Max - reactive music\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/reactivemusic.net\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/reactivemusic.net\\\/?p=5625#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/reactivemusic.net\\\/?p=5625#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/reactivemusic.net\\\/wp-content\\\/uploads\\\/2013\\\/02\\\/Screen-Shot-2013-02-22-at-3.39.04-PM-300x69.png\",\"datePublished\":\"2013-02-22T20:42:24+00:00\",\"dateModified\":\"2014-06-22T17:42:55+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/reactivemusic.net\\\/#\\\/schema\\\/person\\\/56224d281582df7e5518e037ca63e571\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/reactivemusic.net\\\/?p=5625#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/reactivemusic.net\\\/?p=5625\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/reactivemusic.net\\\/?p=5625#primaryimage\",\"url\":\"https:\\\/\\\/reactivemusic.net\\\/wp-content\\\/uploads\\\/2013\\\/02\\\/Screen-Shot-2013-02-22-at-3.39.04-PM.png\",\"contentUrl\":\"https:\\\/\\\/reactivemusic.net\\\/wp-content\\\/uploads\\\/2013\\\/02\\\/Screen-Shot-2013-02-22-at-3.39.04-PM.png\",\"width\":\"762\",\"height\":\"177\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/reactivemusic.net\\\/?p=5625#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/reactivemusic.net\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Twitter streaming from php to Max\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/reactivemusic.net\\\/#website\",\"url\":\"https:\\\/\\\/reactivemusic.net\\\/\",\"name\":\"reactive music\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/reactivemusic.net\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/reactivemusic.net\\\/#\\\/schema\\\/person\\\/56224d281582df7e5518e037ca63e571\",\"name\":\"Tom Zicarelli\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/0da58cf21a2707dd335b204b8ed3cd9194dcbf9d9814ac5d71195a65c76c8a72?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/0da58cf21a2707dd335b204b8ed3cd9194dcbf9d9814ac5d71195a65c76c8a72?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/0da58cf21a2707dd335b204b8ed3cd9194dcbf9d9814ac5d71195a65c76c8a72?s=96&d=mm&r=g\",\"caption\":\"Tom Zicarelli\"},\"sameAs\":[\"http:\\\/\\\/tomzicarelli.com\"],\"url\":\"https:\\\/\\\/reactivemusic.net\\\/?author=2\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Twitter streaming from php to Max - reactive music","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:\/\/reactivemusic.net\/?p=5625","og_locale":"en_US","og_type":"article","og_title":"Twitter streaming from php to Max - reactive music","og_description":"update 6\/2014 &#8211; This project is part of the Internet sensors projects:\u00a0https:\/\/reactivemusic.net\/?p=5859. Check the link for current versions. original post notes Got a test patch running today which breaks out tweets (in php and curl) and sends them to Max via Osc. (update) Have parsed data to remove \u00a0hyperlinks and Twitter symbols. It took some &hellip; Continue reading \"Twitter streaming from php to Max\"","og_url":"https:\/\/reactivemusic.net\/?p=5625","og_site_name":"reactive music","article_published_time":"2013-02-22T20:42:24+00:00","article_modified_time":"2014-06-22T17:42:55+00:00","og_image":[{"url":"https:\/\/reactivemusic.net\/wp-content\/uploads\/2013\/02\/Screen-Shot-2013-02-22-at-3.39.04-PM-300x69.png","type":"","width":"","height":""}],"author":"Tom Zicarelli","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Tom Zicarelli","Est. reading time":"4 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/reactivemusic.net\/?p=5625#article","isPartOf":{"@id":"https:\/\/reactivemusic.net\/?p=5625"},"author":{"name":"Tom Zicarelli","@id":"https:\/\/reactivemusic.net\/#\/schema\/person\/56224d281582df7e5518e037ca63e571"},"headline":"Twitter streaming from php to Max","datePublished":"2013-02-22T20:42:24+00:00","dateModified":"2014-06-22T17:42:55+00:00","mainEntityOfPage":{"@id":"https:\/\/reactivemusic.net\/?p=5625"},"wordCount":105,"image":{"@id":"https:\/\/reactivemusic.net\/?p=5625#primaryimage"},"thumbnailUrl":"https:\/\/reactivemusic.net\/wp-content\/uploads\/2013\/02\/Screen-Shot-2013-02-22-at-3.39.04-PM-300x69.png","keywords":["API","Max\/MSP","OSC","php","portfolio","Twitter"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/reactivemusic.net\/?p=5625","url":"https:\/\/reactivemusic.net\/?p=5625","name":"Twitter streaming from php to Max - reactive music","isPartOf":{"@id":"https:\/\/reactivemusic.net\/#website"},"primaryImageOfPage":{"@id":"https:\/\/reactivemusic.net\/?p=5625#primaryimage"},"image":{"@id":"https:\/\/reactivemusic.net\/?p=5625#primaryimage"},"thumbnailUrl":"https:\/\/reactivemusic.net\/wp-content\/uploads\/2013\/02\/Screen-Shot-2013-02-22-at-3.39.04-PM-300x69.png","datePublished":"2013-02-22T20:42:24+00:00","dateModified":"2014-06-22T17:42:55+00:00","author":{"@id":"https:\/\/reactivemusic.net\/#\/schema\/person\/56224d281582df7e5518e037ca63e571"},"breadcrumb":{"@id":"https:\/\/reactivemusic.net\/?p=5625#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/reactivemusic.net\/?p=5625"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/reactivemusic.net\/?p=5625#primaryimage","url":"https:\/\/reactivemusic.net\/wp-content\/uploads\/2013\/02\/Screen-Shot-2013-02-22-at-3.39.04-PM.png","contentUrl":"https:\/\/reactivemusic.net\/wp-content\/uploads\/2013\/02\/Screen-Shot-2013-02-22-at-3.39.04-PM.png","width":"762","height":"177"},{"@type":"BreadcrumbList","@id":"https:\/\/reactivemusic.net\/?p=5625#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/reactivemusic.net\/"},{"@type":"ListItem","position":2,"name":"Twitter streaming from php to Max"}]},{"@type":"WebSite","@id":"https:\/\/reactivemusic.net\/#website","url":"https:\/\/reactivemusic.net\/","name":"reactive music","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/reactivemusic.net\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/reactivemusic.net\/#\/schema\/person\/56224d281582df7e5518e037ca63e571","name":"Tom Zicarelli","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/0da58cf21a2707dd335b204b8ed3cd9194dcbf9d9814ac5d71195a65c76c8a72?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/0da58cf21a2707dd335b204b8ed3cd9194dcbf9d9814ac5d71195a65c76c8a72?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/0da58cf21a2707dd335b204b8ed3cd9194dcbf9d9814ac5d71195a65c76c8a72?s=96&d=mm&r=g","caption":"Tom Zicarelli"},"sameAs":["http:\/\/tomzicarelli.com"],"url":"https:\/\/reactivemusic.net\/?author=2"}]}},"_links":{"self":[{"href":"https:\/\/reactivemusic.net\/index.php?rest_route=\/wp\/v2\/posts\/5625","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/reactivemusic.net\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/reactivemusic.net\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/reactivemusic.net\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/reactivemusic.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=5625"}],"version-history":[{"count":9,"href":"https:\/\/reactivemusic.net\/index.php?rest_route=\/wp\/v2\/posts\/5625\/revisions"}],"predecessor-version":[{"id":16088,"href":"https:\/\/reactivemusic.net\/index.php?rest_route=\/wp\/v2\/posts\/5625\/revisions\/16088"}],"wp:attachment":[{"href":"https:\/\/reactivemusic.net\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=5625"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/reactivemusic.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=5625"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/reactivemusic.net\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=5625"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}