{"id":24,"date":"2005-07-07T19:36:32","date_gmt":"2005-07-08T00:36:32","guid":{"rendered":"http:\/\/www.chrisdolan.net\/talk\/?p=24"},"modified":"2005-07-07T19:38:13","modified_gmt":"2005-07-08T00:38:13","slug":"itunes-music-store-contest","status":"publish","type":"post","link":"https:\/\/chrisdolan.net\/talk\/2005\/07\/07\/itunes-music-store-contest\/","title":{"rendered":"iTunes Music Store contest"},"content":{"rendered":"<p><\/p>\n\n<pre><code>&lt;?xml version=\"1.0\" encoding=\"utf-8\"?&gt;\n&lt;root&gt;\n&lt;count name=\"curCount\" timestamp=\"Thu, 07 Jul 2005 23:16:00 GMT\"&gt;485066974&lt;\/count&gt;\n&lt;count name=\"preCount\" timestamp=\"Thu, 07 Jul 2005 23:11:00 GMT\"&gt;485060489&lt;\/count&gt;\n&lt;\/root&gt;\n<\/code><\/pre>\n\n<p><\/p>\n\n<ul>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<\/ul>\n\n<p><\/p>\n\n<pre><code>Retrieving http:\/\/www.apple.com\/itunes\/external_counter.xml...\nRate: 23.19 songs\/sec\nPredicted count right now: 485173522 (Thu Jul  7 19:35:14 2005 CDT)\n485,200,000   Thu Jul  7 19:54:15 2005 CDT\n485,300,000   Thu Jul  7 21:06:07 2005 CDT\n485,400,000   Thu Jul  7 22:17:58 2005 CDT\n485,500,000   Thu Jul  7 23:29:50 2005 CDT\n485,600,000   Fri Jul  8 00:41:41 2005 CDT\n485,700,000   Fri Jul  8 01:53:33 2005 CDT\n485,800,000   Fri Jul  8 03:05:25 2005 CDT\n485,900,000   Fri Jul  8 04:17:16 2005 CDT\n486,000,000   Fri Jul  8 05:29:08 2005 CDT\n486,100,000   Fri Jul  8 06:40:59 2005 CDT\n486,200,000   Fri Jul  8 07:52:51 2005 CDT\n486,300,000   Fri Jul  8 09:04:43 2005 CDT\n486,400,000   Fri Jul  8 10:16:34 2005 CDT\n486,500,000   Fri Jul  8 11:28:26 2005 CDT\n486,600,000   Fri Jul  8 12:40:17 2005 CDT\n486,700,000   Fri Jul  8 13:52:09 2005 CDT\n486,800,000   Fri Jul  8 15:04:00 2005 CDT\n486,900,000   Fri Jul  8 16:15:52 2005 CDT\n487,000,000   Fri Jul  8 17:27:44 2005 CDT\n487,100,000   Fri Jul  8 18:39:35 2005 CDT\n487,200,000   Fri Jul  8 19:51:27 2005 CDT\n487,300,000   Fri Jul  8 21:03:18 2005 CDT\n487,400,000   Fri Jul  8 22:15:10 2005 CDT\n487,500,000   Fri Jul  8 23:27:02 2005 CDT\n487,600,000   Sat Jul  9 00:38:53 2005 CDT\n487,700,000   Sat Jul  9 01:50:45 2005 CDT\n487,800,000   Sat Jul  9 03:02:36 2005 CDT\n487,900,000   Sat Jul  9 04:14:28 2005 CDT\n488,000,000   Sat Jul  9 05:26:19 2005 CDT\n488,100,000   Sat Jul  9 06:38:11 2005 CDT\n488,200,000   Sat Jul  9 07:50:03 2005 CDT\n488,300,000   Sat Jul  9 09:01:54 2005 CDT\n488,400,000   Sat Jul  9 10:13:46 2005 CDT\n488,500,000   Sat Jul  9 11:25:37 2005 CDT\n488,600,000   Sat Jul  9 12:37:29 2005 CDT\n488,700,000   Sat Jul  9 13:49:21 2005 CDT\n488,800,000   Sat Jul  9 15:01:12 2005 CDT\n488,900,000   Sat Jul  9 16:13:04 2005 CDT\n489,000,000   Sat Jul  9 17:24:55 2005 CDT\n489,100,000   Sat Jul  9 18:36:47 2005 CDT\n489,200,000   Sat Jul  9 19:48:38 2005 CDT\n489,300,000   Sat Jul  9 21:00:30 2005 CDT\n489,400,000   Sat Jul  9 22:12:22 2005 CDT\n489,500,000   Sat Jul  9 23:24:13 2005 CDT\n489,600,000   Sun Jul 10 00:36:05 2005 CDT\n489,700,000   Sun Jul 10 01:47:56 2005 CDT\n489,800,000   Sun Jul 10 02:59:48 2005 CDT\n489,900,000   Sun Jul 10 04:11:40 2005 CDT\n490,000,000   Sun Jul 10 05:23:31 2005 CDT\n490,100,000   Sun Jul 10 06:35:23 2005 CDT\n490,200,000   Sun Jul 10 07:47:14 2005 CDT\n490,300,000   Sun Jul 10 08:59:06 2005 CDT\n490,400,000   Sun Jul 10 10:10:57 2005 CDT\n490,500,000   Sun Jul 10 11:22:49 2005 CDT\n490,600,000   Sun Jul 10 12:34:41 2005 CDT\n490,700,000   Sun Jul 10 13:46:32 2005 CDT\n490,800,000   Sun Jul 10 14:58:24 2005 CDT\n490,900,000   Sun Jul 10 16:10:15 2005 CDT\n491,000,000   Sun Jul 10 17:22:07 2005 CDT\n491,100,000   Sun Jul 10 18:33:59 2005 CDT\n491,200,000   Sun Jul 10 19:45:50 2005 CDT\n491,300,000   Sun Jul 10 20:57:42 2005 CDT\n491,400,000   Sun Jul 10 22:09:33 2005 CDT\n491,500,000   Sun Jul 10 23:21:25 2005 CDT\n491,600,000   Mon Jul 11 00:33:16 2005 CDT\n491,700,000   Mon Jul 11 01:45:08 2005 CDT\n491,800,000   Mon Jul 11 02:57:00 2005 CDT\n491,900,000   Mon Jul 11 04:08:51 2005 CDT\n492,000,000   Mon Jul 11 05:20:43 2005 CDT\n492,100,000   Mon Jul 11 06:32:34 2005 CDT\n492,200,000   Mon Jul 11 07:44:26 2005 CDT\n492,300,000   Mon Jul 11 08:56:18 2005 CDT\n492,400,000   Mon Jul 11 10:08:09 2005 CDT\n492,500,000   Mon Jul 11 11:20:01 2005 CDT\n492,600,000   Mon Jul 11 12:31:52 2005 CDT\n492,700,000   Mon Jul 11 13:43:44 2005 CDT\n492,800,000   Mon Jul 11 14:55:35 2005 CDT\n492,900,000   Mon Jul 11 16:07:27 2005 CDT\n493,000,000   Mon Jul 11 17:19:19 2005 CDT\n493,100,000   Mon Jul 11 18:31:10 2005 CDT\n493,200,000   Mon Jul 11 19:43:02 2005 CDT\n493,300,000   Mon Jul 11 20:54:53 2005 CDT\n493,400,000   Mon Jul 11 22:06:45 2005 CDT\n493,500,000   Mon Jul 11 23:18:37 2005 CDT\n493,600,000   Tue Jul 12 00:30:28 2005 CDT\n493,700,000   Tue Jul 12 01:42:20 2005 CDT\n493,800,000   Tue Jul 12 02:54:11 2005 CDT\n493,900,000   Tue Jul 12 04:06:03 2005 CDT\n494,000,000   Tue Jul 12 05:17:54 2005 CDT\n494,100,000   Tue Jul 12 06:29:46 2005 CDT\n494,200,000   Tue Jul 12 07:41:38 2005 CDT\n494,300,000   Tue Jul 12 08:53:29 2005 CDT\n494,400,000   Tue Jul 12 10:05:21 2005 CDT\n494,500,000   Tue Jul 12 11:17:12 2005 CDT\n494,600,000   Tue Jul 12 12:29:04 2005 CDT\n494,700,000   Tue Jul 12 13:40:56 2005 CDT\n494,800,000   Tue Jul 12 14:52:47 2005 CDT\n494,900,000   Tue Jul 12 16:04:39 2005 CDT\n495,000,000   Tue Jul 12 17:16:30 2005 CDT\n495,100,000   Tue Jul 12 18:28:22 2005 CDT\n495,200,000   Tue Jul 12 19:40:13 2005 CDT\n495,300,000   Tue Jul 12 20:52:05 2005 CDT\n495,400,000   Tue Jul 12 22:03:57 2005 CDT\n495,500,000   Tue Jul 12 23:15:48 2005 CDT\n495,600,000   Wed Jul 13 00:27:40 2005 CDT\n495,700,000   Wed Jul 13 01:39:31 2005 CDT\n495,800,000   Wed Jul 13 02:51:23 2005 CDT\n495,900,000   Wed Jul 13 04:03:15 2005 CDT\n496,000,000   Wed Jul 13 05:15:06 2005 CDT\n496,100,000   Wed Jul 13 06:26:58 2005 CDT\n496,200,000   Wed Jul 13 07:38:49 2005 CDT\n496,300,000   Wed Jul 13 08:50:41 2005 CDT\n496,400,000   Wed Jul 13 10:02:32 2005 CDT\n496,500,000   Wed Jul 13 11:14:24 2005 CDT\n496,600,000   Wed Jul 13 12:26:16 2005 CDT\n496,700,000   Wed Jul 13 13:38:07 2005 CDT\n496,800,000   Wed Jul 13 14:49:59 2005 CDT\n496,900,000   Wed Jul 13 16:01:50 2005 CDT\n497,000,000   Wed Jul 13 17:13:42 2005 CDT\n497,100,000   Wed Jul 13 18:25:34 2005 CDT\n497,200,000   Wed Jul 13 19:37:25 2005 CDT\n497,300,000   Wed Jul 13 20:49:17 2005 CDT\n497,400,000   Wed Jul 13 22:01:08 2005 CDT\n497,500,000   Wed Jul 13 23:13:00 2005 CDT\n497,600,000   Thu Jul 14 00:24:51 2005 CDT\n497,700,000   Thu Jul 14 01:36:43 2005 CDT\n497,800,000   Thu Jul 14 02:48:35 2005 CDT\n497,900,000   Thu Jul 14 04:00:26 2005 CDT\n498,000,000   Thu Jul 14 05:12:18 2005 CDT\n498,100,000   Thu Jul 14 06:24:09 2005 CDT\n498,200,000   Thu Jul 14 07:36:01 2005 CDT\n498,300,000   Thu Jul 14 08:47:53 2005 CDT\n498,400,000   Thu Jul 14 09:59:44 2005 CDT\n498,500,000   Thu Jul 14 11:11:36 2005 CDT\n498,600,000   Thu Jul 14 12:23:27 2005 CDT\n498,700,000   Thu Jul 14 13:35:19 2005 CDT\n498,800,000   Thu Jul 14 14:47:10 2005 CDT\n498,900,000   Thu Jul 14 15:59:02 2005 CDT\n499,000,000   Thu Jul 14 17:10:54 2005 CDT\n499,100,000   Thu Jul 14 18:22:45 2005 CDT\n499,200,000   Thu Jul 14 19:34:37 2005 CDT\n499,300,000   Thu Jul 14 20:46:28 2005 CDT\n499,400,000   Thu Jul 14 21:58:20 2005 CDT\n499,500,000   Thu Jul 14 23:10:12 2005 CDT\n499,600,000   Fri Jul 15 00:22:03 2005 CDT\n499,700,000   Fri Jul 15 01:33:55 2005 CDT\n499,800,000   Fri Jul 15 02:45:46 2005 CDT\n499,900,000   Fri Jul 15 03:57:38 2005 CDT\n500,000,000   Fri Jul 15 05:09:29 2005 CDT\n<\/code><\/pre>\n\n<p><\/p>\n\n<pre><code>#!\/usr\/bin\/perl -w\n\nuse strict;\nuse LWP::Simple qw(get);\nuse CAM::XML;\nuse DateTime::Format::Strptime;\n\n# Constants\nmy $url = \"http:\/\/www.apple.com\/itunes\/external_counter.xml\";\n\n# Fetch, parse and extract tags from the XML\nprint \"Retrieving $url...\\n\";\nmy $xmlstr = get($url) || die \"Failed to retrive the XML\";\nmy $xml = CAM::XML-&gt;parse(-string =&gt; $xmlstr) || die \"Failed to parse the XML\";\nmy @nodes = $xml-&gt;getNodes(-tag =&gt; \"count\");\ndie \"Not enough data in the XML\\n\" unless (@nodes &gt;= 2);\n\n# Parse the times and counts out of the XML data\nmy $parser = DateTime::Format::Strptime-&gt;new(pattern =&gt; '%a, %d %b %Y %H:%M:%S %Z');\nmy ($count1, $count2, $time1, $time2);\nforeach my $node (@nodes)\n{\n   my $timestr = $node-&gt;getAttribute(\"timestamp\");\n   my $timestamp = $parser-&gt;parse_datetime($timestr)-&gt;epoch;\n   my $count = $node-&gt;getInnerText();\n   if ($node-&gt;getAttribute(\"name\") =~ \/cur\/)\n   {\n      $time2 = $timestamp;\n      $count2 = $count;\n   }\n   else\n   {\n      $time1 = $timestamp;\n      $count1 = $count;\n   }\n}\ndie \"Failed to understand the XML\\n\" unless ($count1 &amp;&amp; $count2 &amp;&amp; $time1 &amp;&amp; $time2);\n\n# Compute the songs per second\nmy $rate = ($count2-$count1)\/($time2-$time1);\nprintf \"    Rate: %.2f songs\/sec\\n\", $rate;\n\n# Extrapolate to now\nmy $now = int($rate * (time()-$time2) + $count2);\nprint \"    Predicted count right now: $now (\".localtime().\" CDT)\\n\";\n\n# Extrapolate to other prize times\nfor (my $c=485000000; $c&lt;=500000000; $c+=100000)\n{\n   next if ($c &lt; $count2); # these have already passed...\n   my $t = ($c-$count2)\/$rate + $time2;\n   # Insert commas\n   my $cstr = $c;\n   1 while ($cstr =~ s\/(\\d)(\\d{3}(?:,.*|))$\/$1,$2\/);\n   print \"    $cstr   \".localtime($t).\" CDT\\n\";\n}\n<\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>&lt;?xml version=&#8221;1.0&#8243; encoding=&#8221;utf-8&#8243;?&gt; &lt;root&gt; &lt;count name=&#8221;curCount&#8221; timestamp=&#8221;Thu, 07 Jul 2005 23:16:00 GMT&#8221;&gt;485066974&lt;\/count&gt; &lt;count name=&#8221;preCount&#8221; timestamp=&#8221;Thu, 07 Jul 2005 23:11:00 GMT&#8221;&gt;485060489&lt;\/count&gt; &lt;\/root&gt; Retrieving http:\/\/www.apple.com\/itunes\/external_counter.xml&#8230; Rate: 23.19 songs\/sec Predicted count right now: 485173522 (Thu Jul 7 19:35:14 2005 CDT) 485,200,000 Thu Jul 7 19:54:15 2005 CDT 485,300,000 Thu Jul 7 21:06:07 2005 CDT 485,400,000 Thu Jul 7 &hellip; <a href=\"https:\/\/chrisdolan.net\/talk\/2005\/07\/07\/itunes-music-store-contest\/\" class=\"more-link\">Continue reading <span class=\"screen-reader-text\">iTunes Music Store contest<\/span> <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[9,8,5],"tags":[],"_links":{"self":[{"href":"https:\/\/chrisdolan.net\/talk\/wp-json\/wp\/v2\/posts\/24"}],"collection":[{"href":"https:\/\/chrisdolan.net\/talk\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/chrisdolan.net\/talk\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/chrisdolan.net\/talk\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/chrisdolan.net\/talk\/wp-json\/wp\/v2\/comments?post=24"}],"version-history":[{"count":0,"href":"https:\/\/chrisdolan.net\/talk\/wp-json\/wp\/v2\/posts\/24\/revisions"}],"wp:attachment":[{"href":"https:\/\/chrisdolan.net\/talk\/wp-json\/wp\/v2\/media?parent=24"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/chrisdolan.net\/talk\/wp-json\/wp\/v2\/categories?post=24"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/chrisdolan.net\/talk\/wp-json\/wp\/v2\/tags?post=24"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}