{"id":5786,"date":"2013-03-03T16:12:39","date_gmt":"2013-03-03T16:12:39","guid":{"rendered":"http:\/\/zerokidz.com\/ideas\/?p=5786"},"modified":"2022-08-03T01:51:29","modified_gmt":"2022-08-03T05:51:29","slug":"twitter-streaming-api-in-max","status":"publish","type":"post","link":"https:\/\/reactivemusic.net\/?p=5786","title":{"rendered":"Twitter streaming API in Max"},"content":{"rendered":"<p class=\"lead\">World map and radio simulation<\/p>\n<p><iframe loading=\"lazy\" title=\"Twitter streaming API in Max\/MSP\" width=\"525\" height=\"295\" src=\"https:\/\/www.youtube.com\/embed\/ZubuYrosT4Y?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe><\/p>\n<h3>note August 3, 2022 &#8211;<\/h3>\n<p>This program is broken on Mac OS Monterey. The PHP code is throwing errors in the OSC library.\u00a0 I&#8217;m not certain there is a reasonable workaround at this point and will be looking at replacing the php code with node.js or another more reliable platform. Also, as noted below &#8211; php is no longer installed in Mac os &#8211; so it requires homebrew or macports<\/p>\n<h4>features<\/h4>\n<ul>\n<li>Twitter streaming v1.1 API and Twitter Apps (using http requests and Oauth in php)<\/li>\n<li>lat\/lon conversion and map plotting in Max<\/li>\n<li>sending data to Max using OSC in php<\/li>\n<li>&#8216;speaking&#8217; tweets using several voices (text to speech)<\/li>\n<li>Using geo-coordinates to control an FM synthesizer<\/li>\n<li>Converting Tweet text to Morse code<\/li>\n<li>Using a data recorder to replay\/save data streams (Max lists)<\/li>\n<\/ul>\n<p><a href=\"https:\/\/reactivemusic.net\/wp-content\/uploads\/2013\/03\/Screen-Shot-2013-03-03-at-10.51.00-AM.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-5787\" title=\"Screen Shot 2013-03-03 at 10.51.00 AM\" src=\"https:\/\/reactivemusic.net\/wp-content\/uploads\/2013\/03\/Screen-Shot-2013-03-03-at-10.51.00-AM-300x155.png\" alt=\"\" width=\"300\" height=\"155\" srcset=\"https:\/\/reactivemusic.net\/wp-content\/uploads\/2013\/03\/Screen-Shot-2013-03-03-at-10.51.00-AM-300x155.png 300w, https:\/\/reactivemusic.net\/wp-content\/uploads\/2013\/03\/Screen-Shot-2013-03-03-at-10.51.00-AM-1024x529.png 1024w, https:\/\/reactivemusic.net\/wp-content\/uploads\/2013\/03\/Screen-Shot-2013-03-03-at-10.51.00-AM-500x258.png 500w, https:\/\/reactivemusic.net\/wp-content\/uploads\/2013\/03\/Screen-Shot-2013-03-03-at-10.51.00-AM.png 1177w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><\/p>\n<p>Compare to satellite photo of earth &#8211; note the pattern of lights.<\/p>\n<p><a href=\"https:\/\/reactivemusic.net\/wp-content\/uploads\/2013\/03\/earthnight.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-5794\" title=\"City Lights 2012 - Flat map\" src=\"https:\/\/reactivemusic.net\/wp-content\/uploads\/2013\/03\/earthnight-300x150.jpg\" alt=\"\" width=\"300\" height=\"150\" srcset=\"https:\/\/reactivemusic.net\/wp-content\/uploads\/2013\/03\/earthnight-300x150.jpg 300w, https:\/\/reactivemusic.net\/wp-content\/uploads\/2013\/03\/earthnight-1024x512.jpg 1024w, https:\/\/reactivemusic.net\/wp-content\/uploads\/2013\/03\/earthnight-500x250.jpg 500w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><\/p>\n<h4>download<\/h4>\n<p><a href=\"https:\/\/github.com\/tkzic\/internet-sensors\">https:\/\/github.com\/tkzic\/internet-sensors<\/a><\/p>\n<p>folder: twitter-stream<\/p>\n<h4>files<\/h4>\n<h5>Max<\/h5>\n<ul>\n<li>world3.maxpat (main patch)<\/li>\n<li>data_recorder_list-tz.maxpat (abstraction for recording data)<\/li>\n<li>data-recorder-wrapper.maxpat\u00a0(abstraction for recording data)<\/li>\n<li>worldMap.jpg<\/li>\n<li>twitter-morning.txt (sample data &#8211; not required)<\/li>\n<\/ul>\n<h5>php<\/h5>\n<ul>\n<li>ctwitter_max3.php (main program)<\/li>\n<li>ctwitter_stream_max3.php (twitter engine)<\/li>\n<li>udp.php (Osc client)<\/li>\n<\/ul>\n<h4>3 August, 2022<\/h4>\n<p>(note: starting with mac os monterey, php is no longer included in mac os. You can install it with homebrew. See this post:\u00a0<a href=\"https:\/\/www.ergonis.com\/products\/tips\/install-php-on-macos.php\">https:\/\/www.ergonis.com\/products\/tips\/install-php-on-macos.php<\/a><\/p>\n<h4>externals<\/h4>\n<div class=\"panel\">\n<p>[note] \u00a0The project displays Tweets without these externals, but you won&#8217;t hear any speech<\/p>\n<\/div>\n<ul>\n<li>[shell] from Jeremy Bernstein\u00a0<a href=\"https:\/\/github.com\/jeremybernstein\/shell\/releases\/tag\/1.0b2\">https:\/\/github.com\/jeremybernstein\/shell\/releases\/tag\/1.0b2<\/a> download this external and add the folder to Options | File Preferences, in Max<\/li>\n<li>Java development kit (for [mxj] object.\u00a0 Go to the Oracle download link <a href=\"https:\/\/www.oracle.com\/java\/technologies\/javase\/javase-jdk8-downloads.html\">https:\/\/www.oracle.com\/java\/technologies\/javase\/javase-jdk8-downloads.html<\/a> but instead of pressing the green download button, &lt;ctrl&gt; click and save the link as described in the instructions from intrepidOlivia in this post\u00a0 <a href=\"https:\/\/gist.github.com\/wavezhang\/ba8425f24a968ec9b2a8619d7c2d86a6\">https:\/\/gist.github.com\/wavezhang\/ba8425f24a968ec9b2a8619d7c2d86a6<\/a><\/li>\n<li>optional &#8211; Soundflower from <a href=\"http:\/\/cycling74.com\">http:\/\/cycling74.com<\/a>\u00a0(only needed if using voice-fx processing &#8211; see below)<\/li>\n<\/ul>\n<h3>authorization<\/h3>\n<p>In addition to having a Twitter account, you will need to set up a Twitter application from the developer site here:<\/p>\n<p><a href=\"https:\/\/dev.twitter.com\/apps\">https:\/\/dev.twitter.com\/apps<\/a><\/p>\n<p>Good instructions on how to do this can be found in this stackoverflow.com post under this heading:\u00a0<strong>So you want to use the Twitter v1.1 API?<\/strong><\/p>\n<p><a href=\"http:\/\/stackoverflow.com\/questions\/12916539\/simplest-php-example-for-retrieving-user-timeline-with-twitter-api-version-1-1\">http:\/\/stackoverflow.com\/questions\/12916539\/simplest-php-example-for-retrieving-user-timeline-with-twitter-api-version-1-1<\/a><\/p>\n<p>When you get to step 5 &#8211; in the instructions &#8211; instead of writing your own code, just use a text editor to copy your access tokens into this php program which is provided:<\/p>\n<ul>\n<li>ctwitter_max3.php<\/li>\n<\/ul>\n<p>Replace the strings in this line of code by copying and pasting the appropriate ones from your Twitter application:<\/p>\n<pre class=\"brush: php; gutter: true\">$t-&gt;login('consumer_key', 'consumer secret', 'access token', 'access secret');<\/pre>\n<p>&nbsp;<\/p>\n<p>So it will end up looking something like this:<\/p>\n<pre class=\"brush: php; gutter: true\">$t-&gt;login('ZdzfNaeflihFydfOHeOA', 'eXzUOfhif4riifgRbCTnnSN0T7neYtg8dIWDC7j3bs', '205589709-5kRI1fllJvU94jjffeerSn9LrTajtxSrvO8', 'u5MuSxPseBemUIBWlMxEFaw899feedXA0eHlReCnQ');<\/pre>\n<pre class=\"brush: php; gutter: true\"><\/pre>\n<p>Yeah &#8211; its cryptic&#8230;<\/p>\n<h3>instructions<\/h3>\n<p><span style=\"line-height: 1.6;\">1. open the Max Patch: world3.maxpat<\/span><span style=\"line-height: 1.6;\"><br \/>\n<\/span><\/p>\n<p><span style=\"line-height: 1.6;\">2. in a terminal window run the php program: ctwitter_max3.php. [note] it runs forever. Press &lt;ctrl-c&gt; when you want to stop streaming Tweets.<\/span><span style=\"line-height: 1.6;\"><br \/>\n<\/span><\/p>\n<div><\/div>\n<div>\n<div class=\"panel\">\n<pre>php .\/ctwitter_max3.php<\/pre>\n<\/div>\n<\/div>\n<p><span style=\"line-height: 1.6;\">3. Switch back to world3.maxpat to see dots populating the map<\/span><\/p>\n<p>4. In Max, press the speaker icon (lower left) to turn on audio.<\/p>\n<p>5. Activate \u00a0voice synth\/morse code using the blue toggle (lower left)<\/p>\n<p>6. Clear the map by pressing the blue message box: &#8220;clear, drawpict a 0 0&#8221;<\/p>\n<p>7. Stop the Tweet stream by pressing &lt;ctrl-c&gt; in the terminal window<\/p>\n<p><a href=\"https:\/\/reactivemusic.net\/wp-content\/uploads\/2013\/03\/Screen-Shot-2014-05-20-at-12.52.44-PM.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-11876\" title=\"Screen Shot 2014-05-20 at 12.52.44 PM\" src=\"https:\/\/reactivemusic.net\/wp-content\/uploads\/2013\/03\/Screen-Shot-2014-05-20-at-12.52.44-PM-300x218.png\" alt=\"\" width=\"300\" height=\"218\" srcset=\"https:\/\/reactivemusic.net\/wp-content\/uploads\/2013\/03\/Screen-Shot-2014-05-20-at-12.52.44-PM-300x218.png 300w, https:\/\/reactivemusic.net\/wp-content\/uploads\/2013\/03\/Screen-Shot-2014-05-20-at-12.52.44-PM.png 362w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><\/p>\n<h4>special voice fx<\/h4>\n<p>If you have Soundflower installed, the Mac OS speech synth output can be routed back to Max for audio processing. This is somewhat complicated, but shows how to process audio in Max from other sources.<\/p>\n<ul>\n<li><span style=\"line-height: 1.6;\">In MacOS System Preferences, set audio output device to Soundflower 2ch<\/span><\/li>\n<li><span style=\"line-height: 1.6;\">Turn up hardware volume control on your computer<\/span><\/li>\n<li><span style=\"line-height: 1.6;\">In Max, Options | Audio Status, set input device to Soundflower 2ch<\/span><\/li>\n<li><span style=\"line-height: 1.6;\">In world3.maxpat double click on [p audio engine] (lower left). Then in the audio-engine sub-patch activate the toggle, (lower right) for voice-fx<\/span><\/li>\n<\/ul>\n<h4><span style=\"line-height: 22px;\">data recording<\/span><\/h4>\n<p>The built-in data recorder\/playback is on the left side of world3.maxpat:<\/p>\n<p><a href=\"https:\/\/reactivemusic.net\/wp-content\/uploads\/2013\/03\/Screen-Shot-2014-05-20-at-1.01.37-PM.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-11877\" title=\"Screen Shot 2014-05-20 at 1.01.37 PM\" src=\"https:\/\/reactivemusic.net\/wp-content\/uploads\/2013\/03\/Screen-Shot-2014-05-20-at-1.01.37-PM-244x300.png\" alt=\"\" width=\"244\" height=\"300\" srcset=\"https:\/\/reactivemusic.net\/wp-content\/uploads\/2013\/03\/Screen-Shot-2014-05-20-at-1.01.37-PM-244x300.png 244w, https:\/\/reactivemusic.net\/wp-content\/uploads\/2013\/03\/Screen-Shot-2014-05-20-at-1.01.37-PM.png 354w\" sizes=\"auto, (max-width: 244px) 100vw, 244px\" \/><\/a><\/p>\n<ul>\n<li><span style=\"line-height: 1.6;\">toggle &#8216;record&#8217; (red toggle) \u00a0to start or stop data recording<\/span><\/li>\n<li><span style=\"line-height: 1.6;\">Note that data will only be recorded when the php program is streaming Tweets in the terminal window (see above)<\/span><\/li>\n<li>Press \/play message or other transport controls to replay data<\/li>\n<\/ul>\n<div>\n<pre>&lt;span style=\"font-family: 'Helvetica Neue', Helvetica, Helvetica, Arial, sans-serif; font-size: 23px; font-weight: bold; line-height: 1.1;\"&gt;\r\n&lt;\/span&gt;<\/pre>\n<pre>&lt;span style=\"font-family: 'Helvetica Neue', Helvetica, Helvetica, Arial, sans-serif; font-size: 23px; font-weight: bold; line-height: 1.1;\"&gt;revision history&lt;\/span&gt;<\/pre>\n<pre>&lt;span style=\"font-family: 'Helvetica Neue', Helvetica, Helvetica, Arial, sans-serif; font-size: 23px; font-weight: bold; line-height: 1.1;\"&gt;\r\n&lt;\/span&gt;<\/pre>\n<\/div>\n<div>\n<h3>revision history<\/h3>\n<h5>1\/19\/2021<\/h5>\n<p>Updates for Max8 and Catalina:<\/p>\n<p>Replaced [aka.speech] external with Jeremy Bernstein&#8217;s [shell] external and the Mac OS command line &#8216;say&#8217; command.<\/p>\n<p>Reinstalled Java Development Kit for [mxj] object<\/p>\n<p>I revised the php code for the Twitter streaming project, to use the coordinates of a corner of the city polygon bounding box. That seems to be more reliable than the geo coordinates which are absent from most Tweets.<\/p>\n<ul>\n<li><span style=\"line-height: 1.6;\">updated 3\/26\/2014 &#8211; fixed runtime error in php server<\/span><\/li>\n<li><span style=\"line-height: 1.6;\">updated 2\/2\/2014 &#8211; simplified user interface and updated audio engine<\/span><\/li>\n<li><span style=\"line-height: 1.6;\">updated 9\/2\/2013 for Twitter v1.1 API with Oauth &#8211; note that older versions of this project are broken due to discontinued Twitter v1.0 API as of June 2013<\/span><\/li>\n<\/ul>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>World map and radio simulation note August 3, 2022 &#8211; This program is broken on Mac OS Monterey. The PHP code is throwing errors in the OSC library.\u00a0 I&#8217;m not certain there is a reasonable workaround at this point and will be looking at replacing the php code with node.js or another more reliable platform. &hellip; <\/p>\n<p class=\"link-more\"><a href=\"https:\/\/reactivemusic.net\/?p=5786\" class=\"more-link\">Continue reading<span class=\"screen-reader-text\"> &#8220;Twitter streaming API in 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":[143,275,28],"tags":[161,6,345,196,190,136],"class_list":["post-5786","post","type-post","status-publish","format-standard","hentry","category-interactive-media-art","category-internet-sensors","category-maxmsp","tag-api","tag-interactive-media","tag-maxmsp","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 API in 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=5786\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Twitter streaming API in Max - reactive music\" \/>\n<meta property=\"og:description\" content=\"World map and radio simulation note August 3, 2022 &#8211; This program is broken on Mac OS Monterey. The PHP code is throwing errors in the OSC library.\u00a0 I&#8217;m not certain there is a reasonable workaround at this point and will be looking at replacing the php code with node.js or another more reliable platform. &hellip; Continue reading &quot;Twitter streaming API in Max&quot;\" \/>\n<meta property=\"og:url\" content=\"https:\/\/reactivemusic.net\/?p=5786\" \/>\n<meta property=\"og:site_name\" content=\"reactive music\" \/>\n<meta property=\"article:published_time\" content=\"2013-03-03T16:12:39+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2022-08-03T05:51:29+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/reactivemusic.net\/wp-content\/uploads\/2013\/03\/Screen-Shot-2013-03-03-at-10.51.00-AM-300x155.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=\"5 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/reactivemusic.net\\\/?p=5786#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/reactivemusic.net\\\/?p=5786\"},\"author\":{\"name\":\"Tom Zicarelli\",\"@id\":\"https:\\\/\\\/reactivemusic.net\\\/#\\\/schema\\\/person\\\/56224d281582df7e5518e037ca63e571\"},\"headline\":\"Twitter streaming API in Max\",\"datePublished\":\"2013-03-03T16:12:39+00:00\",\"dateModified\":\"2022-08-03T05:51:29+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/reactivemusic.net\\\/?p=5786\"},\"wordCount\":849,\"image\":{\"@id\":\"https:\\\/\\\/reactivemusic.net\\\/?p=5786#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/reactivemusic.net\\\/wp-content\\\/uploads\\\/2013\\\/03\\\/Screen-Shot-2013-03-03-at-10.51.00-AM-300x155.png\",\"keywords\":[\"API\",\"interactive media\",\"Max\\\/MSP\",\"php\",\"portfolio\",\"Twitter\"],\"articleSection\":[\"interactive media art\",\"internet-sensors\",\"Max\\\/MSP\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/reactivemusic.net\\\/?p=5786\",\"url\":\"https:\\\/\\\/reactivemusic.net\\\/?p=5786\",\"name\":\"Twitter streaming API in Max - reactive music\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/reactivemusic.net\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/reactivemusic.net\\\/?p=5786#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/reactivemusic.net\\\/?p=5786#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/reactivemusic.net\\\/wp-content\\\/uploads\\\/2013\\\/03\\\/Screen-Shot-2013-03-03-at-10.51.00-AM-300x155.png\",\"datePublished\":\"2013-03-03T16:12:39+00:00\",\"dateModified\":\"2022-08-03T05:51:29+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/reactivemusic.net\\\/#\\\/schema\\\/person\\\/56224d281582df7e5518e037ca63e571\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/reactivemusic.net\\\/?p=5786#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/reactivemusic.net\\\/?p=5786\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/reactivemusic.net\\\/?p=5786#primaryimage\",\"url\":\"https:\\\/\\\/reactivemusic.net\\\/wp-content\\\/uploads\\\/2013\\\/03\\\/Screen-Shot-2013-03-03-at-10.51.00-AM.png\",\"contentUrl\":\"https:\\\/\\\/reactivemusic.net\\\/wp-content\\\/uploads\\\/2013\\\/03\\\/Screen-Shot-2013-03-03-at-10.51.00-AM.png\",\"width\":\"1177\",\"height\":\"609\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/reactivemusic.net\\\/?p=5786#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/reactivemusic.net\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Twitter streaming API in 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 API in 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=5786","og_locale":"en_US","og_type":"article","og_title":"Twitter streaming API in Max - reactive music","og_description":"World map and radio simulation note August 3, 2022 &#8211; This program is broken on Mac OS Monterey. The PHP code is throwing errors in the OSC library.\u00a0 I&#8217;m not certain there is a reasonable workaround at this point and will be looking at replacing the php code with node.js or another more reliable platform. &hellip; Continue reading \"Twitter streaming API in Max\"","og_url":"https:\/\/reactivemusic.net\/?p=5786","og_site_name":"reactive music","article_published_time":"2013-03-03T16:12:39+00:00","article_modified_time":"2022-08-03T05:51:29+00:00","og_image":[{"url":"https:\/\/reactivemusic.net\/wp-content\/uploads\/2013\/03\/Screen-Shot-2013-03-03-at-10.51.00-AM-300x155.png","type":"","width":"","height":""}],"author":"Tom Zicarelli","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Tom Zicarelli","Est. reading time":"5 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/reactivemusic.net\/?p=5786#article","isPartOf":{"@id":"https:\/\/reactivemusic.net\/?p=5786"},"author":{"name":"Tom Zicarelli","@id":"https:\/\/reactivemusic.net\/#\/schema\/person\/56224d281582df7e5518e037ca63e571"},"headline":"Twitter streaming API in Max","datePublished":"2013-03-03T16:12:39+00:00","dateModified":"2022-08-03T05:51:29+00:00","mainEntityOfPage":{"@id":"https:\/\/reactivemusic.net\/?p=5786"},"wordCount":849,"image":{"@id":"https:\/\/reactivemusic.net\/?p=5786#primaryimage"},"thumbnailUrl":"https:\/\/reactivemusic.net\/wp-content\/uploads\/2013\/03\/Screen-Shot-2013-03-03-at-10.51.00-AM-300x155.png","keywords":["API","interactive media","Max\/MSP","php","portfolio","Twitter"],"articleSection":["interactive media art","internet-sensors","Max\/MSP"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/reactivemusic.net\/?p=5786","url":"https:\/\/reactivemusic.net\/?p=5786","name":"Twitter streaming API in Max - reactive music","isPartOf":{"@id":"https:\/\/reactivemusic.net\/#website"},"primaryImageOfPage":{"@id":"https:\/\/reactivemusic.net\/?p=5786#primaryimage"},"image":{"@id":"https:\/\/reactivemusic.net\/?p=5786#primaryimage"},"thumbnailUrl":"https:\/\/reactivemusic.net\/wp-content\/uploads\/2013\/03\/Screen-Shot-2013-03-03-at-10.51.00-AM-300x155.png","datePublished":"2013-03-03T16:12:39+00:00","dateModified":"2022-08-03T05:51:29+00:00","author":{"@id":"https:\/\/reactivemusic.net\/#\/schema\/person\/56224d281582df7e5518e037ca63e571"},"breadcrumb":{"@id":"https:\/\/reactivemusic.net\/?p=5786#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/reactivemusic.net\/?p=5786"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/reactivemusic.net\/?p=5786#primaryimage","url":"https:\/\/reactivemusic.net\/wp-content\/uploads\/2013\/03\/Screen-Shot-2013-03-03-at-10.51.00-AM.png","contentUrl":"https:\/\/reactivemusic.net\/wp-content\/uploads\/2013\/03\/Screen-Shot-2013-03-03-at-10.51.00-AM.png","width":"1177","height":"609"},{"@type":"BreadcrumbList","@id":"https:\/\/reactivemusic.net\/?p=5786#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/reactivemusic.net\/"},{"@type":"ListItem","position":2,"name":"Twitter streaming API in 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\/5786","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=5786"}],"version-history":[{"count":51,"href":"https:\/\/reactivemusic.net\/index.php?rest_route=\/wp\/v2\/posts\/5786\/revisions"}],"predecessor-version":[{"id":20765,"href":"https:\/\/reactivemusic.net\/index.php?rest_route=\/wp\/v2\/posts\/5786\/revisions\/20765"}],"wp:attachment":[{"href":"https:\/\/reactivemusic.net\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=5786"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/reactivemusic.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=5786"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/reactivemusic.net\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=5786"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}