<?xml version="1.0" encoding="UTF-8"?> <rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" ><channel><title>Ryan Underdown &#187; scripting</title> <atom:link href="http://ryanunderdown.com/scripting/feed" rel="self" type="application/rss+xml" /><link>http://ryanunderdown.com</link> <description>SEO, Scripting and Marketing</description> <lastBuildDate>Wed, 01 Feb 2012 04:34:35 +0000</lastBuildDate> <language>en</language> <sy:updatePeriod>hourly</sy:updatePeriod> <sy:updateFrequency>1</sy:updateFrequency> <generator>http://wordpress.org/?v=3.3.1</generator> <item><title>Minview: Minimalist Mobile Browsing</title><link>http://ryanunderdown.com/scripting/minview-minimalist-mobile-browsing.php</link> <comments>http://ryanunderdown.com/scripting/minview-minimalist-mobile-browsing.php#comments</comments> <pubDate>Wed, 08 Sep 2010 14:19:25 +0000</pubDate> <dc:creator>Ryan Underdown</dc:creator> <category><![CDATA[scripting]]></category> <category><![CDATA[browsing]]></category> <category><![CDATA[minimalist]]></category> <category><![CDATA[minview]]></category> <category><![CDATA[mobile]]></category><guid isPermaLink="false">http://ryanunderdown.com/?p=1004</guid> <description><![CDATA[Today I&#8217;m announcing a rapid prototype I&#8217;ve been working on for the past few days called Minview. Mobile browsing has come a long way since the dark days of the blackberry browser, but despite the recent advancements made by the iphone, palm and android devices &#8211; mobile browsers are still left wonting. While android and [...]]]></description> <content:encoded><![CDATA[<p><img src="http://cdn5.ryanunderdown.com/wp-content/uploads/2011/02/20110201-094812.jpg" alt="" class="alignnone size-full" /><br/><br/>Today I&#8217;m announcing a rapid prototype I&#8217;ve been working on for the past few days called <a href="http://minview.com">Minview</a>. Mobile browsing has come a long way since the dark days of the blackberry browser, but despite the recent advancements made by the iphone, palm and android devices &#8211; mobile browsers are still left wonting.  While android and iphone&#8217;s webkit browsers let you zoom in on content formatted for desktop browsers, the presentation is frequently less than optimal.  I was recently impressed by a fellow hacker&#8217;s implementation of a mobile version of <a href="http://ihackernews.com/">hacker news</a> that formats the desktop version into a highly usable mobile version with some added tricks.   I encourage you to visit the site and check it out.</p><p>Unfortunately hacker news is just one of many sites I frequent on a day to day basis.  So I created my own version to work on the sites I love.  Minview currently has two basic ways of working.  The first pulls an RSS feed of my favorite blogs and formats links to content for minimalist mobile viewing.  As you can tell by visiting the default page for minview that I&#8217;m a conservative (atheist) so for the moment you may or may not be interested in the default implementation.  The second, <a href="http://minview.com/drudge/">mindrudge</a>,  parses <a href="http://www.drudgereport.com">drudge report</a> and pulls all of the non static links &#8211; pushes them into an array and then passes those links off to my server-side implementation of &#8220;<a href="http://lab.arc90.com/experiments/readability/">readability</a>&#8220;.</p><p>Minview has a few cool features on top of the traditional readability script.  Namely it:</p><ul><li>parses images and embedded objects and automatically resizes them to fit in your mobile browser</li><li>updates the viewport when an iphone changes orientation (not sure if this works on android)</li><li> selects all links in parsed pages and prepends a link so they are automatically parsed via minview</li><li>can parse any page by sending the url to: minview.com/out/?url=[url here]</li></ul><p>As always I appreciate your feedback and if you have requests for any sites to be added please let me know in the comments.<br /> <br/><br/></p> ]]></content:encoded> <wfw:commentRss>http://ryanunderdown.com/scripting/minview-minimalist-mobile-browsing.php/feed</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>Firefox Keyword Research Addon</title><link>http://ryanunderdown.com/seo/firefox-keyword-research-addon.php</link> <comments>http://ryanunderdown.com/seo/firefox-keyword-research-addon.php#comments</comments> <pubDate>Mon, 10 Aug 2009 03:17:03 +0000</pubDate> <dc:creator>Ryan Underdown</dc:creator> <category><![CDATA[scripting]]></category> <category><![CDATA[SEO]]></category> <category><![CDATA[addon]]></category> <category><![CDATA[Firefox]]></category> <category><![CDATA[keyword research]]></category> <category><![CDATA[keywords]]></category> <category><![CDATA[search]]></category> <category><![CDATA[seobook]]></category> <category><![CDATA[tool]]></category><guid isPermaLink="false">http://ryanunderdown.com/?p=908</guid> <description><![CDATA[A simple firefox search engine addon that makes it faster to do keyword research.  This script passes your keyword research query to seobook's keyword research tool.]]></description> <content:encoded><![CDATA[<p>If you are anything like me you probably use seobook&#8217;s <a href="http://tools.seobook.com/keyword-tools/seobook/">keyword rankings tool</a> enough to have it on speed dial.  Luckily the script used to process results accepts a GET request.  As a result I have made a simple firefox search engine addon to make it easier to get the keyword research you are looking for.</p><p>NOTE:  I am not in any way affiliated with seobook or Aaron Wall.  (Aaron if you&#8217;d like me to take this down send me a note &#8211; Ryan)</p><p>xml for search engine:</p><pre class="brush: xml; title: ; notranslate">
&lt;OpenSearchDescription&gt;
&lt;ShortName&gt;seobook keyword research&lt;/ShortName&gt;
&lt;Description&gt;seobook keyword research
&lt;/Description&gt;
&lt;Image height=&quot;16&quot; width=&quot;16&quot; type=&quot;image/x-icon&quot;&gt;http://seobook.com/favicon.ico&lt;/Image&gt;
&lt;Url type=&quot;text/html&quot; method=&quot;get&quot; template=&quot;http://tools.seobook.com/keyword-tools/seobook/?Keyword={searchTerms}&quot;/&gt;
&lt;/OpenSearchDescription&gt;</pre><p>To install this script just click the down arrow on your search engine bar in firefox and select &#8220;seobook keyword research&#8221;.  Big thanks to Aaron Wall for creating such a useful tool.</p> ]]></content:encoded> <wfw:commentRss>http://ryanunderdown.com/seo/firefox-keyword-research-addon.php/feed</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>PHP &amp; MySQL Keyword Rankings Script</title><link>http://ryanunderdown.com/seo/keyword-rankings-script.php</link> <comments>http://ryanunderdown.com/seo/keyword-rankings-script.php#comments</comments> <pubDate>Fri, 07 Aug 2009 04:35:10 +0000</pubDate> <dc:creator>Ryan Underdown</dc:creator> <category><![CDATA[scripting]]></category> <category><![CDATA[SEO]]></category> <category><![CDATA[Google]]></category> <category><![CDATA[jquery]]></category> <category><![CDATA[keyword rankings]]></category> <category><![CDATA[mysql]]></category> <category><![CDATA[php]]></category> <category><![CDATA[scraper]]></category> <category><![CDATA[serps]]></category> <category><![CDATA[tools]]></category><guid isPermaLink="false">http://ryanunderdown.com/?p=870</guid> <description><![CDATA[I've been working on a Google keyword rankings script that scrapes Google search engine results pages and stores the values in a mysql database.  This video shows it in action.]]></description> <content:encoded><![CDATA[<p>I&#8217;ve been working on a Google keyword rankings script that scrapes Google search engine results pages and stores the values in a mysql database.  The bulk of the heavy lifting is done via php &#038; cURL.  I used some jquery to allow manual updating of rankings.  Much of the scraper code was lifted from an old <a href="http://blog.5ubliminal.com/">5ubliminal</a> post that I can&#8217;t seem to find anymore.  The following video is a short clip of a portion of the script in action.  You can test out the script <a href="http://seotrackr.com">here</a>.</p><p><center><br /> <object width="425" height="344" style="margin:10px 0 10px 0"><param name="movie" value="http://www.youtube.com/v/oRwpCoRGKt8&#038;hl=en&#038;fs=1&#038;"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/oRwpCoRGKt8&#038;hl=en&#038;fs=1&#038;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"></embed></object></center></p><div style="margin-top:20px;margin-bottom:20px;border:1px solid #c0c0c0;vertical-align:bottom;text-align:center;"><h3 style="padding-top:20px">download</h3><p><a href="http://ryanunderdown.com/downloadkeywordrankings.zip">rank.zip</a></div><h3><strong>Files</strong></h3><ul><li><strong>connect.php</strong> &#8211; stores credentials for mysql connection</li><li><strong>add-domains.php</strong> &#8211; allows you to add a domain into the database.  This domain is then presented as an option on the index page.</li><li><strong>add-keywords.php</strong> &#8211; checks a domain (already inserted via add-domains.php) against a keyword.  If a match is found it inserts the data into the database.</li><li><strong>index.php</strong> &#8211; displays all of your domains</li><li><strong>final.php</strong> &#8211; the actual keyword rankings page.  Allows you to update rankings and see each domain&#8217;s keyword rankings on one page.</li><li><strong>style.css</strong> &#8211; some css styling</li><li><strong>postjax2.php</strong> &#8211; processes serp results and stores values in the db</li><li><strong>keyword_rankings.sql</strong> &#8211; database scheme  &#8211; load this query via phpmyadmin to setup your mysql db</li><li><strong>header.php</strong> &#8211; some navigation</li><li><strong>ajaxproxy.php</strong> &#8211; some cross domain proxy I found to allow you to get rankings from multiple ip addresses</li></ul><p>Google doesn&#8217;t particularly like it&#8217;s serps scraped &#8211; sometimes they will return garbage data if they suspect you are doing it.  To get around this, we must bounce our requests off of multiple IP addresses.  If you have a few cheap hosting accounts lying around, upload the <em>postajax.php</em> script to a folder accessible from the webserver.  Insert your urls where these files can be found into the following section of code:</p><pre class="brush: jscript; title: ; notranslate">
   var csurla = 'http://YOUR_URL_HERE/postjax2.php';
   var csurlb = 'http://YOUR_URL_HERE/postjax2.php';
   function cointoss(wot){
         var d= new Date().getSeconds();
         wot=(wot)? wot: [csurla, csurlb];
         d+= Math.round(Math.random()*10);
         return wot[d%2];
         }</pre><p>The above example randomly chooses one of two urls to post the data to.  This code could easily be changed to accommodate as many urls as you have access to.  The next segment of script gathers the data from each table cell in a row of data.  We then serialize the data and post it to to our ajax proxy which gets around the pesky cross domain ajax restriction.  the $.Ajax command that is built in to jQuery then waits for the php proxy script to respond and then inserts the resulting data into the row we just clicked:</p><pre class="brush: jscript; title: ; notranslate">$(&quot;.update&quot;).click(function() {
       /* extract all the info out of the table cells */
       var selectR = $(this);
       var urlsearch = $(&quot;.urlse a&quot;).html();
       var se = $(selectR).find(&quot;td.se&quot;).html();
       var wt = $(selectR).find(&quot;td.wt&quot;).html();
       var str = $(selectR).find(&quot;td.keywords a&quot;).html();
       var ranking = $(selectR).find(&quot;td.rankingspan&quot;).html();
       var orank = $(selectR).find(&quot;td.orank&quot;).html();
       var delta = $(selectR).find(&quot;td.hclass div&quot;).html();
       var clicks = $('#tabler').find(&quot;td.clickstotal&quot;).html();
       var wttotal = $('#tabler').find(&quot;td.wttotal&quot;).html();
       var keysearch = str.replace('/%20', '+');
       var csurl = cointoss();
       var dataString = 'csurl=' + csurl + '&amp;clicks=' + clicks + '&amp;wttotal=' + wttotal + '&amp;domain=' + urlsearch + '&amp;keyword=' + keysearch + '&amp;wt=' + wt + '&amp;se=' + se + '&amp;rank=' + ranking + '&amp;orank=' + orank + '&amp;delta=' + delta;
       $(this).html(&quot;&lt;td colspan='9' align='center'&gt;&lt;img src='http://PATH_TO/loading.gif'&gt;&lt;/td&gt;&quot;);

          $.ajax({
          type: &quot;POST&quot;,
          url: &quot;http://PATH_TO/ajaxproxy.php&quot;,
          data: dataString,
          cache: false,
          success: function(data){
          $(selectR).html(data);
          var totalr = 0;
          var tempint = 0;
          $(&quot;td.clicks&quot;).each(function(){
          if($(this).text().length &gt; 0){
           var tempint = parseFloat($(this).text());
           totalr += tempint;
           }})
          $(&quot;#clickstotal&quot;).html(totalr);

       $(&quot;td.wt&quot;).each(function(){
       if($(this).text().length &gt; 0){
           var tempwt = parseFloat($(this).text()); //convert to number
           totalwt += tempwt;
           totalwt = totalwt.toFixed(2);
           }})
          }
          });
      });</pre>]]></content:encoded> <wfw:commentRss>http://ryanunderdown.com/seo/keyword-rankings-script.php/feed</wfw:commentRss> <slash:comments>13</slash:comments> </item> </channel> </rss>

<!-- W3 Total Cache: CDN debug info:
Engine:             cf
-->
<!-- Performance optimized by W3 Total Cache. Learn more: http://www.w3-edge.com/wordpress-plugins/

Minified using memcached
Page Caching using memcached
Database Caching 1/11 queries in 0.002 seconds using memcached
Object Caching 309/320 objects using memcached

Served from: ryanunderdown.com @ 2012-02-05 00:24:59 -->
