<?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>Woody Hayday &#124; Blog &#187; Javascript</title>
	<atom:link href="http://blog.woodylabs.com/category/javascript/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.woodylabs.com</link>
	<description>An exploration of life, technology and writing</description>
	<lastBuildDate>Wed, 25 Jan 2012 07:08:55 +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>IP to Location Alternative: Javascript &#8211; Using JS to find Browser Country / Location not from IP</title>
		<link>http://blog.woodylabs.com/2011/12/ip-to-location-alternative-javascript-using-js-to-find-browser-country-location-not-from-ip/</link>
		<comments>http://blog.woodylabs.com/2011/12/ip-to-location-alternative-javascript-using-js-to-find-browser-country-location-not-from-ip/#comments</comments>
		<pubDate>Fri, 02 Dec 2011 09:04:41 +0000</pubDate>
		<dc:creator>Woody</dc:creator>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[Snippets]]></category>
		<category><![CDATA[Web Development]]></category>
		<category><![CDATA[asp.net]]></category>
		<category><![CDATA[download]]></category>
		<category><![CDATA[explorations]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[location]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[timezones]]></category>

		<guid isPermaLink="false">http://blog.woodylabs.com/?p=821</guid>
		<description><![CDATA[Know your audience? Got google analytics aggregating their details? Great, good for you! But doe&#8217;s that add any value in the short term? Improve THEIR browsing experience? In the long run you should use analytics to achieve better sites (although many don&#8217;t) &#8211; but for now, right here you can still add some of the [...]<hr /><a href="http://blog.woodylabs.com">Visit Woody Haydays Blog</a><hr />]]></description>
			<content:encoded><![CDATA[<p>Know your audience? Got google analytics aggregating their details? Great, good for you! But doe&#8217;s that add any value in the short term? Improve THEIR browsing experience? In the long run you should use analytics to achieve better sites (although many don&#8217;t) &#8211; but for now, right here you can still add some of the future frill. Take this situation: You want to show different content/additional content to each nationalities (maybe aim for a few &#8211; US, UK, AUS) &#8211; Did you know that adding a national flag that a user can associate with may increase sales up to 20%, or More? Go read Ca$hvertising. In any case if your sitting comfortably, take a look below for the how to!</p>
<div align="center"><img src="http://farm1.staticflickr.com/122/303184034_9ac842c4e1.jpg" width="500" height="358" alt="Mars Landers on Map"><br />
Javascript &#8211; Using JS to find Browser Country / Location not from IP <a href="http://www.flickr.com/photos/toasty/303184034/" title="Mars Landers on Map by ToastyKen, on Flickr" rel="nofollow" target="_blank" style="font-size:10px">Photo by ToastyKen</a>
</div>
<p><span id="more-821"></span></p>
<h4>Common solutions to identifying a users locale/localizing/localising a web client:</h4>
<p>Using PHP / ASP.NET take the users IP and feed into an ip to location service (geo ip) to find a country from ip.<br />
<strong>Pro&#8217;s:</strong> Server-side off the bat, can cache a database of IP&#8217;s (although would you?)<br />
<strong>Con&#8217;s:</strong> Adds another 2 hops to at least initial page load, IP location service&#8217;s can cost or be faulty</p>
<p>Using the request headers (again server-side) to identify an &#8220;accepted language&#8221; and then guestimating their location (taking en-US&#8230;for example.)<br />
<strong>Pro&#8217;s:</strong> Server-side to start with, no extra hops/calls required, this data is already available whether you use it or not, more useful for language (although limited)<br />
<strong>Con&#8217;s:</strong> Unreliable &#8211; mostly because of a few of the BIG browsers default to en-US for all english users, often international users might learn to use a browser in English anyway &#8211; defeating the point</p>
<h4>Another solution (work in progress:)</h4>
<p>A step towards a proper solution, and in my case a solution for MY original problem, is to at least work out their TIMEZONE. What? I hear you say, why the timezone? Well if you know, for example using analytics data, that your user base is 40% US, 50% UK and 10% rest of the world you can at least make a START by dealing with the two major constituents of your audience. I can envisage A more complete solution though, by combining the use of request headers accepted language AND the following Javascript timezone detection:</p>
<p>Searching around a bit I found <a href="http://unmissabletokyo.com/country-detector.html" target="_blank" rel="nofollow">this</a> which showed a lot of promise. This javascript works out the users Operating System time offset, and from that you can define which timezone they are in. Useful, if like me you know your users in a specific timezone are likely to be in one country, not particularly if they are possibly in multiple countries within a timezone. </p>
<h4>A solution / exploration &#8211; location detection in javascript</h4>
<p>The following Javascript gives you both indicators, using navigator.language/systemlanguage it detects the browser&#8217;s language, and then using an expanded upon version of the above script it will provide you with the possible countries from the users OS timezone offset. How useful this is to you is depending on the application, but check it out &#8211; build some fantastic solution off of it, then show me, because I probably won&#8217;t get round to it!</p>
<pre class="brush: jscript; title: ; notranslate">
var langCode = navigator.language || navigator.systemLanguage;
var lang = langCode.toLowerCase(); lang = lang.substr(0,2);

var dateObject = new Date(); //this timezone offset calc taken from http://unmissabletokyo.com/country-detector.html
var timeOffset = - dateObject.getTimezoneOffset() / 60;
var c = &quot;&quot;; //this will ultimately end up as a country/csv of possible countries
switch (timeOffset) { //I expanded upon this switch, adding all the possible countries
	case 0:
	 c = 'Algeria, Ascension Island, Burkina Faso, Faeroe Islands, Ghana, Guinea Republic, Iceland, Ireland, Ivory Coast, Liberia, Mali, Morocco, Sao Tome &amp; Principe, Senegal, Sierra Leone, St Helena, The Gambia, Togo, United Kingdom'; break;

	case 1:
	 c = 'Albania, Andorra, Angola, Australia, Austria, Belgium, Benin, Bosnia, Cameroon, Central Africa Republic, Chad, Congo, Croatia, Czech Republic, Democratic Republic of Congo (Zaire), Denmark, Equatorial Guinea, France, Gabon, Germany, Gibraltar, Guam, Hungary, Italy, Liechtenstein, Luxembourg, Macedonia (Fyrom), Malta, Mariana Islands, Marshall Islands, Micronesia, Monaco, Netherlands, Niger, Nigeria, Norway, Papua New Guinea, Poland, Portugal, San Marino, Serbia, Slovak Republic, Slovenia, Spain, Sweden, Switzerland, Tunisia'; break;

	case -1:
	 c = 'Cape Verde Islands, Cook Islands, French Polynesia, Guinea Bissau, USA'; break;

	case 11:
	 c = 'New Caledonia, Solomon Islands, Vanuatu'; break;

	case -11:
	 c = 'Niue Island, Samoa (American), Samoa (Western), USA'; break;

	case 11.5:
	 c = 'Norfolk Island'; break;

	case 12:
	 c = 'Fiji Islands, Kiribati, Nauru, New Zealand, Tuvalu, Wallis &amp; Futuna Islands'; break;

	case 13:
	 c = 'Tonga'; break;

	case 2:
	 c = 'Botswana, Bulgaria, Burundi, Cyprus, Democratic Republic of Congo (Zaire), Egypt, Finland, Greece, Israel, Jordan, Lebanon, Lesotho, Libya, Lithuania, Malawi, Mozambique, Namibia, Palestine, Romania, Rwanda, South Africa, Sudan, Swaziland, Syria, Turkey, Zambia, Zimbabwe'; break;

	case 3:
	 c = 'Bahrain, Belarus, Comoros Island, Djibouti, Eritrea, Estonia, Ethiopia, Iraq, Kenya, Kuwait, latvia, Madagascar, Mayotte Islands, Moldova, Qatar, Russia, Saudi Arabia, Somalia, Tanzania, Uganda, Ukraine, Yemen Arab Republic'; break;

	case -3:
	 c = 'Argentina, Brazil, Cuba, Greenland, Guyana, Uruguay'; break;

	case 3.5:
	 c = 'Iran'; break;

	case -3.5:
	 c = 'Surinam'; break;

	case 4:
	 c = 'Armenia, Azerbaijan, Georgia, Mauritius, Oman, Reunion Island, Seychelles, United Arab Emirates'; break;

	case -4:
	 c = 'Anguilla, Antigua and Barbuda, Aruba, Barbados, Bermuda, Bolivia, Brazil, Canada, Chile, Dominica Islands, Dominican Republic, Falkland Islands, French Guiana , Grenada, Guadeloupe, Martinique, Montserrat, Netherlands Antilles, Paraguay, Puerto Rico, St Kitts &amp; Nevia, St Lucia, Trinidad &amp; Tobago, Venezuela'; break;

	case 5:
	 c = 'Diego Garcia, Maldives Republic, Pakistan, Turkmenistan'; break;

	case -5:
	 c = 'Bahamas, Brazil, Canada, Cayman Islands, Columbia, Ecuador, Haiti, Jamaica, Panama, Peru, Turks &amp; Caicos Islands, USA'; break;

	case 5.5:
	 c = 'Bhutan,India,Nepal,Sri Lanka'; break;

	case 6:
	 c = 'Bangladesh, Kazakhstan, Kyrgyzstan, Tajikistan, Uzbekistan'; break;

	case -6:
	 c = 'Belize, Canada, Costa Rica, El Salvador, Guatemala, Honduras, Mexico, Nicaragua, USA'; break;

	case 6.5:
	 c = 'Myanmar (Burma)'; break;

	case 7:
	 c = 'Australia, Cambodia, Indonesia, Laos, Thailand, Vietnam'; break;

	case -7:
	 c = 'Canada, Mexico, USA'; break;

	case 8:
	 c = 'Australia, Brunei, China, Hong Kong, Indonesia, Macau, Malaysia, Mongolia, Philippines, Singapore, Taiwan'; break;

	case -8:
	 c = 'Canada, Mexico, USA'; break;

	case 9:
	 c = 'Australia, Indonesia, Japan, Korea, North, Korea, South, Palau'; break;

	case -9:
	 c = 'USA'; break;
}

//at this point Lang should be a 2 letter language code (e.g. en), timeOffset will be the users hour offset from GMT and c will be the csv of possible countries!
alert('Lang: ' + lang + &quot;\r\n&quot; + 'timeOffset: ' + timeOffset + &quot;\r\n&quot; + 'Possible Countries: ' + &quot;\r\n&quot; + c);
</pre>
<p>You can get the full source for this zipped <a href="http://blog.woodylabs.com/downloads/javascript.timezone.country-detection.zip">here</a>, included is a minified version wrapped in a function, isn&#8217;t that nice of me? Use it as you will, and if you create something epic, show me!</p>
<p><strong>Countries/timezones:</strong> I built the timezone offset switch based on the wikipedia list of countries and their timezones, so its comprehensive.</p>
<div class="shr-publisher-821"></div>]]></content:encoded>
			<wfw:commentRss>http://blog.woodylabs.com/2011/12/ip-to-location-alternative-javascript-using-js-to-find-browser-country-location-not-from-ip/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Fix/Hack to make AutoSuggest JQuery Plugin work</title>
		<link>http://blog.woodylabs.com/2011/11/fixhack-to-make-autosuggest-jquery-plugin-work/</link>
		<comments>http://blog.woodylabs.com/2011/11/fixhack-to-make-autosuggest-jquery-plugin-work/#comments</comments>
		<pubDate>Wed, 09 Nov 2011 13:41:12 +0000</pubDate>
		<dc:creator>Woody</dc:creator>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[Web Technology]]></category>
		<category><![CDATA[autosuggest]]></category>
		<category><![CDATA[client-side]]></category>
		<category><![CDATA[hacks]]></category>
		<category><![CDATA[JQuery]]></category>
		<category><![CDATA[ui]]></category>

		<guid isPermaLink="false">http://blog.woodylabs.com/?p=817</guid>
		<description><![CDATA[When I came across Drew Wilson&#8217;s flashy JQuery Autosuggest plugin I happily downloaded the code and started using it within a recent project, but as I used it more and more I kept hitting a bug &#8211; don&#8217;t know if its just the version of JQuery I was tied to using or whether everyone using [...]<hr /><a href="http://blog.woodylabs.com">Visit Woody Haydays Blog</a><hr />]]></description>
			<content:encoded><![CDATA[<p>When I came across <a href="http://code.drewwilson.com/entry/autosuggest-jquery-plugin" target="_blank">Drew Wilson&#8217;s flashy JQuery Autosuggest plugin</a> I happily downloaded the code and started using it within a recent project, but as I used it more and more I kept hitting a bug &#8211; don&#8217;t know if its just the version of JQuery I was tied to using or whether everyone using the pretty plugin suffers it. Either way there was peculiar happenings when removing elements, they would remove 75% of the time, but the other 25% they would remove only to not maintain the associated CSV list of objects properly. </p>
<p>Irritating when the thing looks so pretty out of the box. So rather than opt for one of the non-pretty options I just hacked it. Brutally I just added code to maintain an input as a csv, it needs fixing really but this does work, for now.</p>
<p><a href="http://blog.woodylabs.com/downloads/jquery.autoSuggest.fixed.csv.rar" target="_blank">Click here to download my hack/fixed version</a> which maintains a separate csv (in a designated ID &#8211; search replace &#8220;csvHolder&#8221; if you want to change its ID.)</p>
<p>Hopefully Drew can update his plugin so it works out of the box, its a really useful plugin. </p>
<p><strong>Note:</strong> This rar includes <a href="http://blog.woodylabs.com/2011/11/maintain-a-csv-with-javascript-keep-a-hidden-list/">my csv quick maintaining functions</a> which are required.</p>
<div class="shr-publisher-817"></div>]]></content:encoded>
			<wfw:commentRss>http://blog.woodylabs.com/2011/11/fixhack-to-make-autosuggest-jquery-plugin-work/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Maintain a CSV with Javascript &#8211; keep a hidden list</title>
		<link>http://blog.woodylabs.com/2011/11/maintain-a-csv-with-javascript-keep-a-hidden-list/</link>
		<comments>http://blog.woodylabs.com/2011/11/maintain-a-csv-with-javascript-keep-a-hidden-list/#comments</comments>
		<pubDate>Tue, 08 Nov 2011 13:25:20 +0000</pubDate>
		<dc:creator>Woody</dc:creator>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[Snippets]]></category>
		<category><![CDATA[Web Development]]></category>
		<category><![CDATA[client-side]]></category>
		<category><![CDATA[csv]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[ui]]></category>

		<guid isPermaLink="false">http://blog.woodylabs.com/?p=813</guid>
		<description><![CDATA[The situation: Want to build a comma separated list of int&#8217;s (or whatever) client-side, in javascript, remove/add items on the fly using JS. Well these tiny functions below are what I use, useful when you just need to get a clever form / app input done. Using the below you can add/remove items to an [...]<hr /><a href="http://blog.woodylabs.com">Visit Woody Haydays Blog</a><hr />]]></description>
			<content:encoded><![CDATA[<p>The situation: Want to build a comma separated list of int&#8217;s (or whatever) client-side, in javascript, remove/add items on the fly using JS. Well these tiny functions below are what I use, useful when you just need to get a clever form / app input done.</p>
<p>Using the below you can add/remove items to an input which acts as a csv holder, should be self explanatory, get and set are just shorteners.</p>
<pre class="brush: jscript; title: ; notranslate">function get(a){ //small get
	if (typeof a != &quot;undefined&quot;) {
		return document.getElementById(a).value;
	} else {
		return '';
	}
}

function set(i,v){ //small set
	document.getElementById(i).value = v;
}

function append(i,v){ //small append
	set(i,get(i) + v);
}

function appendTocsv(i,v){ //small append csv
	if (get(i).length == 0){
		set(i,v);
	} else {
		append(i,', ' + v);
	}
}

function incsv(id,v){ //check a csv (in element with id) for a value (v)

	var csv = get(id);
	var csvArray = csv.split(', ');
	var found = false;

	if (csvArray.length &gt; 0){

		for (i = 0; i &lt;= csvArray.length; i++){

			if (csvArray[i] == v){ found = true;  }

		}

	}

	return found;

}

function removeFromcsv(id,v){ //removes a val from csv

	var csv = get(id);
	var csvArray = csv.split(', ');
	var removed = false;
	var endString = &quot;&quot;;

	if (csvArray.length &gt; 0){

		for (i = 0; i &lt;= csvArray.length-1; i++){

			if (csvArray[i] == v){ removed = true;  } else { 

				if (endString.length &gt; 0){ endString += ', '; }
				endString += csvArray[i]; 

			}

		}

	}

	set(id,endString);

	return removed;

}</pre>
<div class="shr-publisher-813"></div>]]></content:encoded>
			<wfw:commentRss>http://blog.woodylabs.com/2011/11/maintain-a-csv-with-javascript-keep-a-hidden-list/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Unable to drop JQuery sortable onto empty list? Hack solution</title>
		<link>http://blog.woodylabs.com/2011/10/unable-to-drop-jquery-sortable-onto-empty-list-hack-solution/</link>
		<comments>http://blog.woodylabs.com/2011/10/unable-to-drop-jquery-sortable-onto-empty-list-hack-solution/#comments</comments>
		<pubDate>Thu, 13 Oct 2011 11:34:29 +0000</pubDate>
		<dc:creator>Woody</dc:creator>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[Snippets]]></category>
		<category><![CDATA[Web Development]]></category>
		<category><![CDATA[JQuery]]></category>
		<category><![CDATA[Sortable]]></category>

		<guid isPermaLink="false">http://blog.woodylabs.com/?p=789</guid>
		<description><![CDATA[The problem: You have a multi column (or area) JQuery UI Sortable (these are neat) which only needs to show a &#8220;drop zone&#8221; when the user has started to drag a sortable object. The JQuery documentation for this doesn&#8217;t account for the reality of the above, its all very well if you want the empty [...]<hr /><a href="http://blog.woodylabs.com">Visit Woody Haydays Blog</a><hr />]]></description>
			<content:encoded><![CDATA[<p>The problem: You have a multi column (or area) JQuery UI Sortable (these are neat) which only needs to show a &#8220;drop zone&#8221; when the user has started to drag a sortable object.</p>
<p>The JQuery documentation for this doesn&#8217;t account for the reality of the above, its all very well if you want the empty column/div to SHOW all the time as empty, that is remain as some sort of visible placeholder, but if the empty list should show as empty, until an object is ready to be dropped on it then JQuery sortable&#8217;s don&#8217;t work. It all comes down to dimensions, if an empty list exists without a height value, you can&#8217;t drop onto it.</p>
<p>More specifically, if an empty jquery-sortable list exists without a specific height set at the point of [.sortable start] (that is BEFORE the event is fired) then you just cannot drop the sortable.</p>
<div align="center" style="font-size:10px;"><img src="http://farm3.static.flickr.com/2326/2378867408_4cc90791d6.jpg" width="500" height="375" alt="the JavaScript Code"><br />
<a href="http://www.flickr.com/photos/dmitry-baranovskiy/2378867408/" title="the JavaScript Code by Dmitry Baranovskiy, on Flickr">Image by Dmitry Baranovskiy</a></div>
<p>I played with fixing this by adjusting each empty list (in the example belows case #col1,#col2,#col3) to have a defined height (and background, which looks nice) within the sortable &#8220;start&#8221; option, but this just creates boxes (or landing pads/zones) you can see, but not drop on. </p>
<p>Long and short of it &#8211; the solution to being able to drop jquery sortable&#8217;s onto invisible empty lists is to bind a function which adds a css class (or sets the height specifically) to the empty (invisible) sortable list when a user clicks one of the goal objects. This is then fired BEFORE the sortable takes hold and so creates drag-droppable landing zones for the users held sortable. It then uses the sortables &#8220;stop&#8221; property to remove the class it has added to any columns which have it. </p>
<pre class="brush: jscript; title: ; notranslate">
function sortAndDrag() {

	//show BEFORE sortable starts
     $(&quot;#col1, #col2, #col3&quot;).bind('click mousedown', function(){
          $(&quot;.col&quot;).each(function (c) {
                if ($(&quot;div&quot;, this).size() == 0) {
                    $(this).addClass(&quot;colZoneEmpty&quot;)
                }
            })
     });

	//enable sortable
    $(&quot;#col1, #col2, #col3&quot;).sortable({
        revert: true,
        connectWith: &quot;.col&quot;,
        stop: function (a, d) {
            $(&quot;.col&quot;).removeClass(&quot;colZoneEmpty&quot;);
	    //any ajax processing
        }
    });

}
//in this example 3 column div's exist with the id's 'col1','col2','col3', all of which have the class 'col'
//colZoneEmpty is a css class which makes the empty list visible
</pre>
<p>There are of course improvements you could make here, like checking the users dragging before setting any styling, but this quick hackaround works where it shouldn&#8217;t.</p>
<div class="shr-publisher-789"></div>]]></content:encoded>
			<wfw:commentRss>http://blog.woodylabs.com/2011/10/unable-to-drop-jquery-sortable-onto-empty-list-hack-solution/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Ebay Partner Network Changes RSS Urls (again)</title>
		<link>http://blog.woodylabs.com/2011/06/ebay-partner-network-changes-rss-urls-again/</link>
		<comments>http://blog.woodylabs.com/2011/06/ebay-partner-network-changes-rss-urls-again/#comments</comments>
		<pubDate>Fri, 24 Jun 2011 13:39:26 +0000</pubDate>
		<dc:creator>Woody</dc:creator>
				<category><![CDATA[Affiliate Marketing]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[Auction2Post]]></category>
		<category><![CDATA[ebay partner network]]></category>

		<guid isPermaLink="false">http://blog.woodylabs.com/?p=629</guid>
		<description><![CDATA[If you are part of the wave of Ebay Partner Network (EPN) affiliates that stuck up middle-man eshops fed by their RSS feeds you may have missed this. In the 5 years or so I have been an ebay affiliate they have only done this a few times, but for the hundreds of custom scripts [...]<hr /><a href="http://blog.woodylabs.com">Visit Woody Haydays Blog</a><hr />]]></description>
			<content:encoded><![CDATA[<p>If you are part of the wave of Ebay Partner Network (EPN) affiliates that stuck up middle-man eshops fed by their RSS feeds you may have missed <a href="http://www.ebaypartnernetworkblog.com/en/2011/03/new-rss-feed-generator-available-soon/" rel="nofollow" target="_blank">this</a>. In the 5 years or so I have been an ebay affiliate they have only done this a few times, but for the hundreds of custom scripts using the urls it can be no small task to reconfigure them. Anyway after putting it off till the last week I thought this week I should remedy the old RSS urls before they stop supporting them: </p>
<div style="border: 1px solid #09C; background-color: #b5d1ea; padding: 4px; margin: 10px; text-align:center">The existing RSS Feed Generator will no longer be available in the ePN portal after April 17th. <em>However, your existing RSS feed URL’s will continue to be supported until June 30th.</em> We do recommend that you switch to the new RSS Feed Generator to be sure you’re getting more relevant results in your RSS feed.</div>
<p>So if your in the same boat and you have hundreds (thousands?) of RSS urls hard-coded into files across multiple servers I would recommend you get working, perhaps the following will be of use. I should mention at this point that <a href="http://blog.woodylabs.com/2009/10/auction-2-post/" target="_blank">Auction 2 Post</a> users (and Bans, Wordbay etc.) will not suffer any fallout as they use the shopping api (which is sensible now, but back in 2006 wasn&#8217;t an accessible option.)</p>
<p>I have written a quick transformation script (js) which will take an old epn RSS url (http://rss.api.ebay.com/ws/rssapi?&#8230;) and transform it into a new one (http://rest.ebay.com/epn/v1/find/item.rss?&#8230;), if you only have a few urls to change over then it might be enough for you:</p>
<div style="border: 1px solid #09C; background-color: #b5d1ea; padding: 4px; margin: 10px; text-align:center">
<a href="http://woodylabs.com/scripts/ebay-epn-rss-url-converter.php" target="_blank">Ebay Partner Network (EPN) RSS Url Converter/Transformer</a>
</div>
<div align="center"><img src="http://blog.woodylabs.com/wp-content/uploads/2011/06/epn-rss-url-change-2011.png" alt="" title="epn-rss-url-change-2011" width="600" height="346" class="aligncenter size-full wp-image-633" /></div>
<p><span id="more-629"></span></p>
<p>If you have a LOT of these urls in files (like I do) then you might want to use something a little more automated. In my case I wrote a complete FTP spider which flies for each and every file hunting for old ebay RSS urls, transforming them and updating the pages. This was fine in my case because mine were pretty standardly laid out, similar use etc. I wouldn&#8217;t recommend it if you use the extremity of the RSS parameters.</p>
<p>Anyhow as the FTP crawler was pretty huge of a code puke, I might release that separately at some point (it has other good uses <img src='http://blog.woodylabs.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> ), here is the csharp for transforming old RSS urls into new ones though (Note: it doesnt deal with all the parameters, only the most common/ones I use regularly, it may need tailoring.)</p>
<pre class="brush: csharp; title: ; notranslate">static string transformEPNRSSUrl(string inputUrl)
{
    string transformed = &quot;http://rest.ebay.com/epn/v1/find/item.rss?&quot;;

    //split url by ?
    string[] splitUrl = inputUrl.Split(new char[] { '?' });

    //split second by &amp;
    string[] splitParams = splitUrl[1].Split(new char[] { '&amp;' });

    //new params
    string newParams = &quot;&quot;;

    //transform params
    foreach (string s in splitParams)
    {
        string retID = &quot;&quot;;
        string retVal = &quot;&quot;;
        string[] sV = s.Split(new char[] { '=' });

        //mostly :p
        retVal = sV[1];

        //see if tis required
        if (sV[0] == &quot;sacat&quot;) { retID = &quot;categoryId1&quot;; }
        if (sV[0] == &quot;satitle&quot;) { retID = &quot;keyword&quot;; }
        if (sV[0] == &quot;afepn&quot;) { retID = &quot;campaignid&quot;; }
        if (sV[0] == &quot;customid&quot;) { retID = &quot;customid&quot;; }
        if (sV[0] == &quot;saprclo&quot;) { retID = &quot;minPrice&quot;; }
        if (sV[0] == &quot;saprchi&quot;) { retID = &quot;maxPrice&quot;; }

        if (retID != &quot;&quot;)
        {
            if (newParams != &quot;&quot;) { newParams += &quot;&amp;&quot;; } //for all but first
            newParams += retID + &quot;=&quot; + retVal;
        }

        //last few additions 24/06/2011
        if (sV[0] == &quot;fts&quot; &amp;&amp; sV[1] == &quot;2&quot;) { newParams += &quot;descriptionSearch=true&quot;; }
        if (sV[0] == &quot;sascs&quot; &amp;&amp; sV[1] == &quot;2&quot;) { newParams += &quot;listingType1=AuctionWithBIN&amp;listingType2=FixedPrice&quot;; }

    }

    transformed += newParams;
    //following is some defaults for me, check these yourself, use:
    //http://woodylabs.com/scripts/ebay-epn-rss-url-converter.php
    transformed += &quot;&amp;sortOrder=EndTimeSoonest&amp;programid=15&amp;toolid=10039&amp;listingType1=All&amp;lgeo=1&amp;feedType=rss&quot;;

    return transformed;
}</pre>
<div align="center"><a href="http://woodylabs.com/scripts/ebay-rss-transformer-csharp.txt" target="_blank">View as txt</a></div>
<p>Use both the transformer script page and the csharp code at your own peril, it worked for me over hundreds of urls, mostly without a hitch, but thats not saying it will for you. Check your urls, after all each is probably worth £ to you. Visit the RSS urls and use the <a href="https://publisher.ebaypartnernetwork.com/PublisherUserManualPage?page_id=ToolValidator" rel="nofollow" target="_blank">ebay tool validator</a> to check the RSS feed has worked!</p>
<p>Just a quick mention of the positives of ebay deciding to rip out the old system (its not all a pain in the arse!): </p>
<ul>
<li>It reminded me how widespread my old ebay affiliate sites are, it was a good excuse to take stock and write FTPCrawler</li>
<li>The whole system is much cleaner, parameter wise</li>
<li>The introduction of multiple selection parameters is useful</li>
<li>The new RSS generator is nice (as much as anyone uses the thing</li>
</ul>
<div class="shr-publisher-629"></div>]]></content:encoded>
			<wfw:commentRss>http://blog.woodylabs.com/2011/06/ebay-partner-network-changes-rss-urls-again/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Grab Tabs &#8211; Get chromium urls in a list</title>
		<link>http://blog.woodylabs.com/2011/05/grab-tabs-get-chromium-urls-in-a-list/</link>
		<comments>http://blog.woodylabs.com/2011/05/grab-tabs-get-chromium-urls-in-a-list/#comments</comments>
		<pubDate>Thu, 05 May 2011 10:18:54 +0000</pubDate>
		<dc:creator>Woody</dc:creator>
				<category><![CDATA[Code]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[Web Technology]]></category>

		<guid isPermaLink="false">http://blog.woodylabs.com/?p=603</guid>
		<description><![CDATA[Long story short there is a bunch of extensions for chrome/chromium which provide you with session management and tab control but frankly none of them do exactly what I wanted so I have fudged a solution by using session manager and writing a 5 minute extension: Grab Tabs. Somehow it seemed easier to write an [...]<hr /><a href="http://blog.woodylabs.com">Visit Woody Haydays Blog</a><hr />]]></description>
			<content:encoded><![CDATA[<p>Long story short there is a bunch of extensions for chrome/chromium which provide you with session management and tab control but frankly none of them do exactly what I wanted so I have fudged a solution by using <a href="https://chrome.google.com/extensions/search?itemlang=&#038;q=session+manager" target="_blank">session manager</a> and writing a 5 minute extension: <a href="https://chrome.google.com/extensions/detail/ldoeilnidhchbjodpehhjjgjmfhjlfgp" target="_blank">Grab Tabs</a>. Somehow it seemed easier to write an extension than to find one which just worked, feature creep gets people bad!</p>
<div style="border:1px solid #09C; background-color:#b5d1ea;padding:4px;margin:10px;">***Grab Tabs is Super Simple<br />
This is a super simple extension which dumps a list of current tabs to a text box, ready to copy out to wherever.</p>
<p>There&#8217;s no need for complexity, sometimes you just need a list of the urls you have open, across windows &#8211; essential functionality for a lot of us power users.</p>
<p>Session managers are great, (I use the extension called Session Manager) &#8211; but they still lack just the brute functionality to get a list of tab urls straight out. This does that.</p>
<p>No frill, simple tab url extraction <img src='http://blog.woodylabs.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </div>
<div align="center" style="font-size:24px"><a href="https://chrome.google.com/extensions/detail/ldoeilnidhchbjodpehhjjgjmfhjlfgp" target="_blank">>> Get Grab Tabs <<</a></div>
<div class="shr-publisher-603"></div>]]></content:encoded>
			<wfw:commentRss>http://blog.woodylabs.com/2011/05/grab-tabs-get-chromium-urls-in-a-list/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Javascript in Spreadsheets? &#8211; Google Apps Script Does that</title>
		<link>http://blog.woodylabs.com/2010/03/javascript-in-spreadsheets-google-apps-script-does-that/</link>
		<comments>http://blog.woodylabs.com/2010/03/javascript-in-spreadsheets-google-apps-script-does-that/#comments</comments>
		<pubDate>Mon, 08 Mar 2010 09:06:50 +0000</pubDate>
		<dc:creator>Woody</dc:creator>
				<category><![CDATA[Affiliate Marketing]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[Search Engine Optimisation]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[Web Development]]></category>
		<category><![CDATA[Web Technology]]></category>

		<guid isPermaLink="false">http://blog.woodylabs.com/?p=177</guid>
		<description><![CDATA[Far from being a google promoter, I do like this. Google Apps Script opens up google spreadsheets to scripting &#8211; Just like Macro&#8217;s etc in Excel, but with Javascript. This effectively opens up a world of online data processing and analysis that would have not been easily possible within a browser before hand, especially suiting [...]<hr /><a href="http://blog.woodylabs.com">Visit Woody Haydays Blog</a><hr />]]></description>
			<content:encoded><![CDATA[<p>Far from being a google promoter, I do like <a href="http://www.google.com/google-d-s/scripts/scripts.html" rel="nofollow">this</a>. Google Apps Script opens up google spreadsheets to scripting &#8211; Just like Macro&#8217;s etc in Excel, but with Javascript. This effectively opens up a world of online data processing and analysis that would have not been easily possible within a browser before hand, especially suiting web-devs its nice to see an amount of custom programmability going into semi-democratised tools. </p>
<div align="center"><img src="http://blog.woodylabs.com/wp-content/uploads/2010/03/javascript-spread-sheet.png" alt="" title="javascript-spread-sheet" width="593" height="222" class="aligncenter size-full wp-image-178" /></div>
<p>I can see applications ranging from replacing my SEO QUAKE&#8217;s list parameter check to many many web marketing, analytics, data crawling and recording processes, all of which you could do in ms.excel, yet more accessible here. This isn&#8217;t a big deal, but landed on my lap this morning so here&#8217;s the share <img src='http://blog.woodylabs.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<div class="shr-publisher-177"></div>]]></content:encoded>
			<wfw:commentRss>http://blog.woodylabs.com/2010/03/javascript-in-spreadsheets-google-apps-script-does-that/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Developers Arsenal PHP to ASP Jump</title>
		<link>http://blog.woodylabs.com/2009/04/developers-arsenal-php-to-asp-jump/</link>
		<comments>http://blog.woodylabs.com/2009/04/developers-arsenal-php-to-asp-jump/#comments</comments>
		<pubDate>Sun, 12 Apr 2009 18:08:47 +0000</pubDate>
		<dc:creator>Woody</dc:creator>
				<category><![CDATA[ASP.Net]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://blog.woodylabs.com/?p=52</guid>
		<description><![CDATA[Server Side Scripting is a wonderful term. It’s what takes the control off of the browser and solely in the hands of the developer, because ultimately the developer is the one with the coding capacity. Since I first messed about with php for my own entertainment I have always revelled in using it, perhaps it [...]<hr /><a href="http://blog.woodylabs.com">Visit Woody Haydays Blog</a><hr />]]></description>
			<content:encoded><![CDATA[<p>Server Side Scripting is a wonderful term. It’s what takes the control off of the browser and solely in the hands of the developer, because ultimately the developer is the one with the coding capacity. Since I first messed about with php for my own entertainment I have always revelled in using it, perhaps it was my age or my development of programming understanding but on learning php code just started falling into place. Over the years I have written PHP that ranges from the most basic database reading and amending (Data Access Layers <img src='http://blog.woodylabs.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  ) to flexible web spiders, data crunchers, content management systems, data extractors, image processors and full on web applications. For me PHP is my main gun, the thing I find easiest to sling a quick script out in. With the ever robust XAMPP you can stick a web server up anywhere in minutes and have a machine doing what you want with data or the web or images shortly thereafter. People have jailbreaked iPhones just to run php from web cafe&#8217;s and similar.</p>
<p>PHP is the tool of the open source project. (There are of course companies that use it (my companies do) and huge online websites/behemoths of information that use it as a server side language.) but overall the corporate world, any web software with intent to move to larger markets and bridge the gap to desktop apps codes in ASP and now ASP.NET. There was nothing I couldn’t do in PHP/mySQL that I wanted to do, it for me was a very good toolset and fulfilled my needs as far as I could see them. But it would lack if you wanted to move towards desktop applications, and its lack of association to Microsoft does act as a restriction in some ways. So there it is ASP / ASP.Net needs to picked up. For me this was more a conversion than picking up a new skill, I took PHP and hammered that knowledge into ASP Syntax – this actually works nearly entirely for the most part, you get over the differences very easily if you have done even a bit of visual basic before (as ASP in its default form is essentially vb – C#  is also excellent.)</p>
<p>I just took a course in  &#8220;ASP.NET Scalable web applications using AJAX&#8221; (Learning Tree in euston &#8211; would recommend it &#8211; taught by an excellent <a href="http://www.dynamisys.co.uk">asp.net consultant</a>, Richard Howells) which affirmed a lot of programmatic choices I have previously made and enlightened me to improved structures for scalability. The thing I most took out of it though is how much work microsoft have put into their IDE (Visual studio.) VS2008 is pretty phenomenal if you come from hand coding everything yourself. I can see how developers get wooed by intellisense and ease of access, they intend to make it all easy &#8211; every functionality provided by web technologies in their control based environment. For me it still remains though that in providing a huge framework of simplicity to every user you do carry a certain amount of redundancy, that is while it may take longer to code pure PHP \ Javascript it will still do specifically what you want it too, and only that. Potentially with the microsoft IDE you can create what you want entirely and then cut the fat so to speak afterwards &#8211; there are substantial speed benefits with their project based management, this methodology however is not my first choice.</p>
<p>For any person wanting to seek employment or understanding in web development I would highly recommend jumping strait into PHP or ASP.NET (probably PHP unless you have a requirement for ASP – ASP.NET C# Pays better than PHP here in the UK.) After learning the basics of HTML, Javascript and CSS, PHP or ASP brings you clearly up another step. I am available for code/developer mentoring/support as of Summer 2009.</p>
<div class="shr-publisher-52"></div>]]></content:encoded>
			<wfw:commentRss>http://blog.woodylabs.com/2009/04/developers-arsenal-php-to-asp-jump/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

