<?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>Niels Bosma</title>
	<atom:link href="http://nielsbosma.se/feed/" rel="self" type="application/rss+xml" />
	<link>http://nielsbosma.se</link>
	<description>Home of SeoTools for Excel</description>
	<lastBuildDate>Sat, 11 May 2013 11:46:45 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>SeoTools 4.0.7 is released &#8211; with MajesticSEO!</title>
		<link>http://nielsbosma.se/2013/01/12/seotools-4-0-7-is-released-with-majesticseo/</link>
		<comments>http://nielsbosma.se/2013/01/12/seotools-4-0-7-is-released-with-majesticseo/#comments</comments>
		<pubDate>Sat, 12 Jan 2013 17:50:36 +0000</pubDate>
		<dc:creator>nielsbosma</dc:creator>
				<category><![CDATA[SeoTools]]></category>

		<guid isPermaLink="false">http://nielsbosma.se/?p=1161</guid>
		<description><![CDATA[<p><a href="http://nielsbosma.se/wp-content/uploads/2013/01/majestic01.png"></a>I&#8217;m really happy to introduce support for MajesticSEO!</p> <p>Fetch directly in Excel:</p> Metrics for any URL such as <a href="http://blog.majesticseo.com/development/flow-metrics/">CitationFlow &#38; TrustFlow</a>, External backlinks, Indexed urls and much more. Backlinks! Anchor texts All domains hosted on an IP Keyword metrics New &#38; lost backlinks by date range <p>Read more about this on the <a [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://nielsbosma.se/wp-content/uploads/2013/01/majestic01.png"><img class="alignright size-medium wp-image-1174" title="majestic0" src="http://nielsbosma.se/wp-content/uploads/2013/01/majestic01-127x300.png" alt="" width="127" height="300" /></a>I&#8217;m really happy to introduce support for MajesticSEO!</p>
<p>Fetch directly in Excel:</p>
<ul>
<li>Metrics for any URL such as <a href="http://blog.majesticseo.com/development/flow-metrics/">CitationFlow &amp; TrustFlow</a>, External backlinks, Indexed urls and much more.</li>
<li>Backlinks!</li>
<li>Anchor texts</li>
<li>All domains hosted on an IP</li>
<li>Keyword metrics</li>
<li>New &amp; lost backlinks by date range</li>
</ul>
<p>Read more about this on the <a title="MajesticSEO" href="http://nielsbosma.se/projects/seotools/functions/majesticseo/">MajesticSEO</a> documentation page. (I&#8217;ll post a video tutorial soon!)</p>
<p>I&#8217;ve also reimplemented the <a title="GoogleAnalytics" href="http://nielsbosma.se/projects/seotools/functions/googleanalytics/">Google Analytics</a> tool from scratch with a new UI and authentication is now through OAUTH.</p>
<p><a title="Download" href="http://nielsbosma.se/projects/seotools/download/">Give me SeoTools 4.0.7 now!</a></p>
<p>Happy SEOing!</p>
<p>/Niels</p>
]]></content:encoded>
			<wfw:commentRss>http://nielsbosma.se/2013/01/12/seotools-4-0-7-is-released-with-majesticseo/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SEOlytics integration in SeoTools 3.3</title>
		<link>http://nielsbosma.se/2012/02/13/seolytics-integration-in-seotools-3-3/</link>
		<comments>http://nielsbosma.se/2012/02/13/seolytics-integration-in-seotools-3-3/#comments</comments>
		<pubDate>Mon, 13 Feb 2012 19:27:14 +0000</pubDate>
		<dc:creator>nielsbosma</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://nielsbosma.se/?p=1044</guid>
		<description><![CDATA[<p><a href="http://nielsbosma.se/wp-content/uploads/2012/02/SEOlyticsWelcome.png"></a></p> <p>As a first external SEO tool, the german company &#8211; SEOlytics &#8211; has chosen to sponsor an integration of their new API.</p> <p><a title="SEOlytics" href="http://nielsbosma.se/projects/seotools/functions/seolytics/">Read more about SEOlytics support in 3.3.</a></p> New functions! <a title="DmozEntries" href="http://nielsbosma.se/projects/seotools/functions/dmozentries/">DmozEntries</a> <a title="WikipediaLinks" href="http://nielsbosma.se/projects/seotools/functions/wikipedialinks/">WikipediaLinks</a> <a title="UnshortUrl" href="http://nielsbosma.se/projects/seotools/functions/unshorturl/">UnshortUrl</a> <a title="Velocity" href="http://nielsbosma.se/projects/seotools/functions/velocity/">Velocity</a> <a title="StripWhitespace" href="http://nielsbosma.se/projects/seotools/functions/stripwhitespace/">StripWhitespace</a> <a title="NormalizeWhitespace" href="http://nielsbosma.se/projects/seotools/functions/normalizewhitespace/">NormalizeWhitespace</a> <a title="NiceColors" [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://nielsbosma.se/wp-content/uploads/2012/02/SEOlyticsWelcome.png"><img class="alignnone size-full wp-image-1046" title="SEOlyticsWelcome" src="http://nielsbosma.se/wp-content/uploads/2012/02/SEOlyticsWelcome.png" alt="" width="421" height="324" /></a></p>
<p>As a first external SEO tool, the german company &#8211; SEOlytics &#8211; has chosen to sponsor an integration of their new API.</p>
<p><strong><a title="SEOlytics" href="http://nielsbosma.se/projects/seotools/functions/seolytics/">Read more about SEOlytics support in 3.3.</a></strong></p>
<h2>New functions!</h2>
<ul>
<li><a title="DmozEntries" href="http://nielsbosma.se/projects/seotools/functions/dmozentries/">DmozEntries</a></li>
<li><a title="WikipediaLinks" href="http://nielsbosma.se/projects/seotools/functions/wikipedialinks/">WikipediaLinks</a></li>
<li><a title="UnshortUrl" href="http://nielsbosma.se/projects/seotools/functions/unshorturl/">UnshortUrl</a></li>
<li><a title="Velocity" href="http://nielsbosma.se/projects/seotools/functions/velocity/">Velocity</a></li>
<li><a title="StripWhitespace" href="http://nielsbosma.se/projects/seotools/functions/stripwhitespace/">StripWhitespace</a></li>
<li><a title="NormalizeWhitespace" href="http://nielsbosma.se/projects/seotools/functions/normalizewhitespace/">NormalizeWhitespace</a></li>
<li><a title="NiceColors" href="http://nielsbosma.se/projects/seotools/functions/nicecolors/">NiceColors</a></li>
</ul>
<h2>Other&#8230;</h2>
<ul>
<li><strong>Changed how SeoTools handles errors. You can now opt-out to get popups for subsequent errors in that session.</strong></li>
<li>Improved error handling when SeoTools.config.xml isn&#8217;t found. Also now displaying path to SeoTools.config.xml in About dialog.</li>
<li>Blecko functions removed due to Blecko now requires authentication.</li>
<li><strong>Updated <a title="CheckBacklink" href="http://nielsbosma.se/projects/seotools/functions/checkbacklink/">CheckBacklink</a> so expectedLinkHref and expectedLinkText now supports wildcards.</strong><br />
Example:<br />
=CheckBacklink(&#8220;http://nielsbosma.se&#8221;, &#8220;http://*.uservoice.com&#8221;,&#8221;Suggestion*&#8221;,TRUE)<br />
Thanks to Serge Esteves for suggesting this.</li>
<li>Fixed problems with result strings from <a title="XPathOnUrl" href="http://nielsbosma.se/projects/seotools/functions/xpathonurl/">XPathOnUrl </a>containing &#8220;/t&#8221; (for example &#8220;http://t.co/vrPCw2Nu&#8221; was returned as &#8220;http:/ .co/vrPCw2Nu&#8221;).<br />
Thanks Javi Garcia fore reporting this.</li>
<li><strong>Updated <a title="GooglePageRank" href="http://nielsbosma.se/projects/seotools/functions/googlepagerank/">GooglePageRank</a> function so PR(n/a) returns -1 (instead of 0) to separate from PR(0).</strong><br />
Thanks to Pieter-Jan Vanneste for suggesting this.</li>
<li>Fixed workaround for bug in HtmlAgility Pack (http://htmlagilitypack.codeplex.com/workitem/28317) when parsing documents with tags.</li>
<li>Support for Open graph protocol in <a title="HtmlMeta" href="http://nielsbosma.se/projects/seotools/functions/htmlmeta/">HtmlMeta</a>:<br />
=HtmlMeta(&#8220;http://ogp.me/&#8221;,&#8221;og:title&#8221;)</li>
<li>Fixed bug in <a title="GoogleAnalytics" href="http://nielsbosma.se/projects/seotools/functions/googleanalytics/">Google Analytics</a> Wizard where last profileId wasn&#8217;t remembered correctly.</li>
<li>Added &#8220;Insert values&#8221; option in <a title="GoogleAnalytics" href="http://nielsbosma.se/projects/seotools/functions/googleanalytics/">Google Analytics</a> wizard.</li>
<li>Updated to the latest ExcelDna version (r.70906).</li>
<li>Added links to Forums, Documentation, Like on Facebook and What&#8217;s new in Help section.</li>
<li>Added attributes for Tlds in SeoTools.config.xml to support additional date formats, such as &#8220;dd/MM/yyyy&#8221; (.FR). New Tld attributes are WhoIsCreatedDateFormat, WhoIsUpdatedDateFormat and WhoIsExpiresDateFormat. Date formats like &#8220;dd/MM&#8221; are interpreted as the &#8220;next future date&#8221;. If today is dec. 14 2011, &#8220;01/02&#8243; is interpreted as febr. 1 2012.</li>
<li>Added ability to skip update reminders until next version.</li>
</ul>
<p><strong><a title="Download" href="http://nielsbosma.se/projects/seotools/download/">Download 3.3 today!</a></strong></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://nielsbosma.se/2012/02/13/seolytics-integration-in-seotools-3-3/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>How to setup Tlds in SeoTools.config.xml</title>
		<link>http://nielsbosma.se/2011/12/07/how-to-setup-tld-in-seotools-config-xml/</link>
		<comments>http://nielsbosma.se/2011/12/07/how-to-setup-tld-in-seotools-config-xml/#comments</comments>
		<pubDate>Wed, 07 Dec 2011 05:47:50 +0000</pubDate>
		<dc:creator>nielsbosma</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://nielsbosma.se/?p=892</guid>
		<description><![CDATA[<p>I got a <a href="http://seoforums.nielsbosma.se/index.php?p=/discussion/2/whoisdomaincreated#Item_1">question in the SeoTool Community Forum</a> on how to setup a .fr TLD in SeoTools.config.xml and decided to make a blog post about it.</p> <p>This post assumes some knowledge in regular expressions. If you don&#8217;t know this already, regular expression are extremely powerful and really useful when working with SEO. Start [...]]]></description>
			<content:encoded><![CDATA[<p>I got a <a href="http://seoforums.nielsbosma.se/index.php?p=/discussion/2/whoisdomaincreated#Item_1">question in the SeoTool Community Forum</a> on how to setup a<em> .fr</em> TLD in SeoTools.config.xml and decided to make a blog post about it.</p>
<p>This post assumes some knowledge in regular expressions. If you don&#8217;t know this already, regular expression are extremely powerful and really useful when working with SEO. Start by reading <a href="http://www.seomoz.org/blog/an-seos-guide-to-regex">An SEO&#8217;s Guide to RegEx</a>.</p>
<p>In SeoTools.config.xml you can add additional TLDs to support functions that use whois such as <a title="WhoIs" href="http://nielsbosma.se/projects/seotools/functions/whois/">WhoIs</a>, <a title="WhoIsDomainExpires" href="http://nielsbosma.se/projects/seotools/functions/whoisdomainexpires/">WhoIsDomainExpires</a>, <a title="WhoIsDomainUpdated" href="http://nielsbosma.se/projects/seotools/functions/whoisdomainupdated/">WhoIsDomainUpdated</a>, <a title="WhoIsDomainCreated" href="http://nielsbosma.se/projects/seotools/functions/whoisdomaincreated/">WhoIsDomainCreated</a>, <a title="DomainAge" href="http://nielsbosma.se/projects/seotools/functions/domainage/">DomainAge</a> and <a title="IsDomainRegistered" href="http://nielsbosma.se/projects/seotools/functions/isdomainregistered/">IsDomainRegistered</a>.</p>
<p>In SeoTools.config.xml, in the section <em>&lt;Tlds&gt;</em> add:</p>
<p>&lt;Tld Name=&#8221;fr&#8221; WhoIsServer=&#8221;" WhoIsNotFoundRegex=&#8221;" WhoIsCreatedRegex=&#8221;" WhoIsUpdatedRegex=&#8221;" WhoIsExpiresRegex=&#8221;" WhoIsDelayMs=&#8221;1000&#8243;/&gt;</p>
<p>First we figure out a good <em>WhoIsServer</em> for .fr. Googling &#8220;Whois server france&#8221; gives us &#8220;whois.nic.fr&#8221;. (Also &lt;tld&gt;.whois-servers.net usually works).</p>
<p>Now we do a whois search for a domain we know exist. Either find a whois service for your particular TLD or use a command line tools such as <a href="http://technet.microsoft.com/en-us/sysinternals/bb897435">Whois in Sysinternals</a>.</p>
<p><a href="http://nielsbosma.se/wp-content/uploads/2011/12/WhoIsSysInternals.png"><img class="alignnone size-medium wp-image-894" title="WhoIsSysInternals" src="http://nielsbosma.se/wp-content/uploads/2011/12/WhoIsSysInternals-300x163.png" alt="" width="300" height="163" /></a></p>
<p>Then we figure out the regular expression for parsing out the part that we need. To do this, I copy the whois text into <a href="http://gskinner.com/RegExr/">RegExr</a>.</p>
<p><a href="http://nielsbosma.se/wp-content/uploads/2011/12/RegExr.png"><img class="alignnone size-medium wp-image-897" title="RegExr" src="http://nielsbosma.se/wp-content/uploads/2011/12/RegExr-300x162.png" alt="" width="300" height="162" /></a></p>
<p>For WhoIsCreatedRegex we create the regular expression &#8220;(?:created:\s*(\d{2}/\d{2}/\d{4}))&#8221;. Do the same for WhoIsUpdatedRegex and WhoIsExpiresRegex.</p>
<p>We now finally need to figure out what happens when getting whois for a domain that doesn&#8217;t exist.</p>
<p><a href="http://nielsbosma.se/wp-content/uploads/2011/12/WhoIsSysInternalsNotFound.png"><img class="alignnone size-medium wp-image-900" title="WhoIsSysInternalsNotFound" src="http://nielsbosma.se/wp-content/uploads/2011/12/WhoIsSysInternalsNotFound-300x187.png" alt="" width="300" height="187" /></a></p>
<p>We see that if the domain isn&#8217;t registered, the text &#8220;no entries found&#8221; is present in the whois result.</p>
<p>Our final &lt;Tld&gt; is now:</p>
<p>&lt;Tld Name=&#8221;fr&#8221; WhoIsServer=&#8221;whois.nic.fr&#8221; WhoIsNotFoundRegex=&#8221;no entries found&#8221; WhoIsCreatedRegex=&#8221;(?:created:\s*(\d{2}/\d{2}/\d{4}))&#8221; WhoIsUpdatedRegex=&#8221;(?:last-update:\s*(\d{2}/\d{2}/\d{4}))&#8221; WhoIsExpiresRegex=&#8221;(?:anniversary:\s*(\d{2}/\d{2}))&#8221; WhoIsDelayMs=&#8221;1000&#8243;/&gt;</p>
<p>While working on this post I noticed that SeoTools wont propertly parse DD/MM/YYYY formatted dates. I will fix this in the next release of SeoTools (3.3). Until then only <a title="IsDomainRegistered" href="http://nielsbosma.se/projects/seotools/functions/isdomainregistered/">IsDomainRegistered</a> will work properly with this configuration.</p>
<p>UPDATE:<br />
This was fixed in <a title="SEOlytics integration in SeoTools 3.3" href="http://nielsbosma.se/2012/02/13/seolytics-integration-in-seotools-3-3/">3.3</a>. Final &lt;Tld&gt;for <em>.fr</em> is:</p>
<p>&lt;Tld Name=&#8221;fr&#8221; WhoIsServer=&#8221;whois.nic.fr&#8221; WhoIsNotFoundRegex=&#8221;no entries found&#8221; WhoIsCreatedRegex=&#8221;(?:created:\s*(\d{2}/\d{2}/\d{4}))&#8221; WhoIsCreatedDateFormat=&#8221;dd/MM/yyyy&#8221; WhoIsUpdatedRegex=&#8221;(?:last-update:\s*(\d{2}/\d{2}/\d{4}))&#8221; WhoIsUpdatedDateFormat=&#8221;dd/MM/yyyy&#8221; WhoIsExpiresRegex=&#8221;(?:anniversary:\s*(\d{2}/\d{2}))&#8221; WhoIsExpiresDateFormat=&#8221;dd/MM&#8221; WhoIsDelayMs=&#8221;1000&#8243;/&gt;</p>
<p>If you manage to make a TLD setting, please share with the community by posting in the comment section below.</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://nielsbosma.se/2011/12/07/how-to-setup-tld-in-seotools-config-xml/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>New 3.2 brings you GoogleAnalytics support, SpinText and a whole bunch of fixes!</title>
		<link>http://nielsbosma.se/2011/11/28/new-3-2-brings-you-googleanalytics-support-spintext-and-a-whole-bunch-of-fixes/</link>
		<comments>http://nielsbosma.se/2011/11/28/new-3-2-brings-you-googleanalytics-support-spintext-and-a-whole-bunch-of-fixes/#comments</comments>
		<pubDate>Mon, 28 Nov 2011 05:28:33 +0000</pubDate>
		<dc:creator>nielsbosma</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://nielsbosma.se/?p=619</guid>
		<description><![CDATA[<p>It was a long time I released a new version of SeoTools, mostly because of the birth of my beautiful daughter Julia. But between diaper changes I&#8217;ve had some time to develop next release of SeoTools. And this time I think you will not be disappointed.</p> <p style="text-align: left;">The primary new feature is an implementation [...]]]></description>
			<content:encoded><![CDATA[<p>It was a long time I released a new version of SeoTools, mostly because of the birth of my beautiful daughter Julia. But between diaper changes I&#8217;ve had some time to develop next release of SeoTools. And this time I think you will not be disappointed.</p>
<p style="text-align: left;">The primary new feature is an implementation of <a href="http://code.google.com/apis/analytics/docs/gdata/gdataDeveloperGuide.html">Google Data Export API</a> to get any <a href="http://www.google.com/analytics/">Google Analytics</a> data into your spreadsheet.</p>
<p style="text-align: left;">The magic happens in the new function <a title="GoogleAnalytics" href="http://nielsbosma.se/projects/seotools/functions/googleanalytics/">GoogleAnalytics</a> but as these formulas can become quite complicated, I have built a wizard that helps pick metric, dimension etc. It&#8217;s smart enough to figure out what Goal, Custom variable and Dynamic segments you&#8217;re using.</p>
<h4 style="text-align: left;"><span id="more-619"></span></h4>
<p><a href="http://nielsbosma.se/wp-content/uploads/2011/11/analytics.png"><img class="alignnone size-full wp-image-624" title="analytics" src="http://nielsbosma.se/wp-content/uploads/2011/11/analytics.png" alt="" width="610" height="682" /></a></p>
<h4 style="text-align: left;">New functions</h4>
<ul>
<li><a title="GoogleAnalytics" href="http://nielsbosma.se/projects/seotools/functions/googleanalytics/">GoogleAnalytics</a></li>
<li><a title="SpinText" href="http://nielsbosma.se/projects/seotools/functions/spintext/">SpinText</a></li>
<li><a title="Dump" href="http://nielsbosma.se/projects/seotools/functions/dump/">Dump</a></li>
<li><a title="HtmlFirst" href="http://nielsbosma.se/projects/seotools/functions/htmlfirst/">HtmlFirst</a></li>
<li><a title="BleckoLinkingDomains" href="http://nielsbosma.se/projects/seotools/functions/bleckolinkingdomains/">BleckoLinkingDomains</a></li>
<li><a title="BleckoInboundLinks" href="http://nielsbosma.se/projects/seotools/functions/bleckoinboundlinks/">BleckoInboundLinks</a></li>
<li><a title="GoogleResultCount" href="http://nielsbosma.se/projects/seotools/functions/googleresultcount/">GoogleResultCount</a></li>
</ul>
<h4>The rest&#8230;</h4>
<p>- Found a major problem with my builds making some of the cool stuff from previous release not working such as <a title="JsonPathOnUrl" href="http://nielsbosma.se/projects/seotools/functions/jsonpathonurl/">JsonPathOnUrl</a>.</p>
<p>- Fixed problems with <a title="HtmlH1" href="http://nielsbosma.se/projects/seotools/functions/htmlh1/">HtmlH1</a>, <a title="HtmlH2" href="http://nielsbosma.se/projects/seotools/functions/htmlh2/">HtmlH2</a>, <a title="HtmlH3" href="http://nielsbosma.se/projects/seotools/functions/htmlh3/">HtmlH3</a>.</p>
<p>- Fixed so <a title="HtmlMeta" href="http://nielsbosma.se/projects/seotools/functions/htmlmeta/">HtmlMeta </a>functions can read content like &#8220;In Frida&#8217;s house there&#8217;s a lot of awesome people&#8221;. (Before &#8220;In Frida&#8221; would be returned).</p>
<p>- I have disabled preview for most functions (especially those with long running times) when in Excel function wizard.</p>
<p>- Fixed broken <a title="GoogleIndexCount" href="http://nielsbosma.se/projects/seotools/functions/googleindexcount/">GoogleIndexCount</a>, <a title="GoogleLinkCount" href="http://nielsbosma.se/projects/seotools/functions/googlelinkcount/">GoogleLinkCount</a>.</p>
<p>- If no separator is specified in <a title="StringJoin" href="http://nielsbosma.se/projects/seotools/functions/stringjoin/">StringJoin</a>, &#8220;&#8221; is used as the default separator<br />
=StringJoin(,{&#8220;Niels&#8221;,&#8221;Frida&#8221;,&#8221;Julia&#8221;})</p>
<p>- <a title="RegexpFind" href="http://nielsbosma.se/projects/seotools/functions/regexpfind/">RegexpFind </a>now works like <a title="RegexpFindOnUrl" href="http://nielsbosma.se/projects/seotools/functions/regexpfindonurl/">RegexpFindOnUrl </a>and returns an array with all matches.</p>
<p>- Added support for defining HTTP authentication using urls like http://username:password@domain.com (instead of using HttpDownloaderConfigs).<br />
See example of this in cookbook/SeoMozUrlMetrics.xls</p>
<p>- Added an alias for ‘extention’ called ‘extension’ in <a title="UrlProperty" href="http://nielsbosma.se/projects/seotools/functions/urlproperty/">UrlProperty</a>. (Thanks Darroch).</p>
<p><a title="SeoTools" href="http://nielsbosma.se/projects/seotools/"> Be the first to download!</a></p>
]]></content:encoded>
			<wfw:commentRss>http://nielsbosma.se/2011/11/28/new-3-2-brings-you-googleanalytics-support-spintext-and-a-whole-bunch-of-fixes/feed/</wfw:commentRss>
		<slash:comments>18</slash:comments>
		</item>
		<item>
		<title>Fixed PR, Cookbook, and a whole bunch of scraping functionality &#8211; Helloworld SeoTools 2.3</title>
		<link>http://nielsbosma.se/2011/10/08/fixed-pr-cookbook-and-a-whole-bunch-of-scraping-functionality-helloworld-seotools-2-3/</link>
		<comments>http://nielsbosma.se/2011/10/08/fixed-pr-cookbook-and-a-whole-bunch-of-scraping-functionality-helloworld-seotools-2-3/#comments</comments>
		<pubDate>Sat, 08 Oct 2011 16:46:06 +0000</pubDate>
		<dc:creator>nielsbosma</dc:creator>
				<category><![CDATA[SEO]]></category>
		<category><![CDATA[SeoTools]]></category>
		<category><![CDATA[BuildHttpDownloaderConfig]]></category>
		<category><![CDATA[DirectoryList]]></category>
		<category><![CDATA[DownloadString]]></category>
		<category><![CDATA[JsonPathOnUrl]]></category>

		<guid isPermaLink="false">http://nielsbosma.se/?p=552</guid>
		<description><![CDATA[<p>Time for a new release of SeoTools 2.3!</p> <p>New functions:</p> <a title="BuildHttpDownloaderSettings" href="http://nielsbosma.se/projects/seotools/functions/buildhttpdownloadersettings/">BuildHttpDownloaderConfig</a> <a title="JsonPathOnUrl" href="http://nielsbosma.se/projects/seotools/functions/jsonpathonurl/">JsonPathOnUrl</a> <a title="DownloadString" href="http://nielsbosma.se/projects/seotools/functions/downloadstring/">DownloadString</a> <a title="DirectoryList" href="http://nielsbosma.se/projects/seotools/functions/directorylist/">DirectoryList</a> <p>For this release I&#8217;ve spent a lot of time on the scraping functionality, introducing <a title="BuildHttpDownloaderSettings" href="http://nielsbosma.se/projects/seotools/functions/buildhttpdownloadersettings/">HttpDownloader</a> configs that allows you to control most aspects of the HTTP request in functions like <a [...]]]></description>
			<content:encoded><![CDATA[<p>Time for a new release of SeoTools 2.3!</p>
<p>New functions:</p>
<ul>
<li><a title="BuildHttpDownloaderSettings" href="http://nielsbosma.se/projects/seotools/functions/buildhttpdownloadersettings/">BuildHttpDownloaderConfig</a></li>
<li><a title="JsonPathOnUrl" href="http://nielsbosma.se/projects/seotools/functions/jsonpathonurl/">JsonPathOnUrl</a></li>
<li><a title="DownloadString" href="http://nielsbosma.se/projects/seotools/functions/downloadstring/">DownloadString</a></li>
<li><a title="DirectoryList" href="http://nielsbosma.se/projects/seotools/functions/directorylist/">DirectoryList</a></li>
</ul>
<p>For this release I&#8217;ve spent a lot of time on the scraping functionality, introducing <a title="BuildHttpDownloaderSettings" href="http://nielsbosma.se/projects/seotools/functions/buildhttpdownloadersettings/">HttpDownloader</a> configs that allows you to control most aspects of the HTTP request in functions like <a title="XPathOnUrl" href="http://nielsbosma.se/projects/seotools/functions/xpathonurl/">XPathOnUrl </a>and <a title="RegexpFindOnUrl" href="http://nielsbosma.se/projects/seotools/functions/regexpfindonurl/">RegexpFindOnUrl</a>.</p>
<p>From now on I also ship a folder called cookbook/ with a bunch of examples how to use the different functions in SeoTools.</p>
<p>Thanks to Amit for pointing out that GooglePageRank was broken due to Google changing their urls for PageRank toolbars yesterday.</p>
<p><a title="SeoTools" href="http://nielsbosma.se/projects/seotools/">Get your copy!</a></p>
<h3>Minor fixes</h3>
<p>- Added optional attribute queryValue to function <a title="UrlProperty" href="http://nielsbosma.se/projects/seotools/functions/urlproperty/">UrlProperty </a>for setting queryParam values on an url.</p>
<p>Example:<br />
=UrlProperty(&#8220;http://domain.com/Default.aspx?a=b&amp;foo=x&#8221;;&#8221;query&#8221;;&#8221;foo&#8221;;&#8221;bar&#8221;)<br />
=&gt; http://domain.com/Default.aspx?a=b&amp;foo=bar</p>
<p>- Changed <a title="XPathOnUrl" href="http://nielsbosma.se/projects/seotools/functions/xpathonurl/">XPathOnUrl </a>to return an array of nodes (similar to ImportXML) instead of a &#8220;;&#8221;-concatenated string (no more messing with (xpath)[1]).<br />
In a similar way <a title="RegexpFindOnUrl" href="http://nielsbosma.se/projects/seotools/functions/regexpfindonurl/">RegexpFindOnUrl </a>is now returning an array if there are multiple matches.</p>
<p>- RegexpFind now has the ability to take an vector as input. The first match is returned.<br />
=RegexpFind(A3:C3;&#8221;\b[A-Z0-9._%-]+@[A-Z0-9.-]+\.[A-Z]{2,4}\b&#8221;;0) =&gt; (* Returns the first email adress found in in columns A3:C3 *)</p>
<p>- Updated About dialog to be able to show more third party software.</p>
<p>- All function that take an url (such as XPathOnUrl, RegexpFindOnUrl, etc.) now supports syntax for accessing local files:<br />
file:///C:/path/to/file.xml<br />
file:///path/relative/workbook.xml<br />
file:///../../path/relative/workbook.xml</p>
<p>(You can tell SeoTools what encoding to use, using xmlHttpDownloaderSettings.ResponseEncoding.)</p>
]]></content:encoded>
			<wfw:commentRss>http://nielsbosma.se/2011/10/08/fixed-pr-cookbook-and-a-whole-bunch-of-scraping-functionality-helloworld-seotools-2-3/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Office 64bit version, W3CValidate and DomainAge in new SeoTools 2.2</title>
		<link>http://nielsbosma.se/2011/09/19/office-64bit-version-w3cvalidate-and-domainage-in-new-seotools-2-2/</link>
		<comments>http://nielsbosma.se/2011/09/19/office-64bit-version-w3cvalidate-and-domainage-in-new-seotools-2-2/#comments</comments>
		<pubDate>Mon, 19 Sep 2011 19:36:10 +0000</pubDate>
		<dc:creator>nielsbosma</dc:creator>
				<category><![CDATA[SEO]]></category>

		<guid isPermaLink="false">http://nielsbosma.se/2011/09/19/office-64bit-version-w3cvalidate-and-domainage-in-new-seotools-2-2/</guid>
		<description><![CDATA[<p>It&#8217;s time for a new <a href="http://nielsbosma.se/projects/seotools/">SeoTools</a> release!</p> <p>I happy to announce that I&#8217;ve finally managed to produce a version that works with Office 2010 64bit! Make sure you <a href="http://nielsbosma.se/projects/seotools/">download</a> the correct version marked with &#8220;64&#8243;.</p> New functions <p>- <a href="http://nielsbosma.se/projects/seotools/functions/w3cvalidate/">W3CValidate</a></p> <p>- <a href="http://nielsbosma.se/projects/seotools/functions/urlproperty/">UrlProperty</a></p> <p>- <a href="http://nielsbosma.se/projects/seotools/functions/whoisdomaincreated/">WhoIsDomainCreated</a></p> <p>- <a href="http://nielsbosma.se/projects/seotools/functions/whoisdomainupdated/">WhoIsDomainUpdated</a></p> <p>- <a href="http://nielsbosma.se/projects/seotools/functions/whoisdomainexpires/">WhoIsDomainExpires</a></p> <p>- [...]]]></description>
			<content:encoded><![CDATA[<p>It&#8217;s time for a new <a href="http://nielsbosma.se/projects/seotools/">SeoTools</a> release!</p>
<p>I happy to announce that I&#8217;ve finally managed to produce a version that works with Office 2010 64bit! Make sure you <a href="http://nielsbosma.se/projects/seotools/">download</a> the correct version marked with &#8220;64&#8243;.</p>
<h2>New functions</h2>
<p>- <a href="http://nielsbosma.se/projects/seotools/functions/w3cvalidate/">W3CValidate</a></p>
<p>- <a href="http://nielsbosma.se/projects/seotools/functions/urlproperty/">UrlProperty</a></p>
<p>- <a href="http://nielsbosma.se/projects/seotools/functions/whoisdomaincreated/">WhoIsDomainCreated</a></p>
<p>- <a href="http://nielsbosma.se/projects/seotools/functions/whoisdomainupdated/">WhoIsDomainUpdated</a></p>
<p>- <a href="http://nielsbosma.se/projects/seotools/functions/whoisdomainexpires/">WhoIsDomainExpires</a></p>
<p>- <a href="http://nielsbosma.se/projects/seotools/functions/internetarchivefirstseen/">InternetArchiveFirstSeen</a></p>
<p>- <a href="http://nielsbosma.se/projects/seotools/functions/domainage/">DomainAge</a></p>
<h2>Other updates</h2>
<p>- On startup SeoTools now checks <a href="http://seotools.nielsbosma.se/latestversion.txt">http://seotools.nielsbosma.se/latestversion.txt</a> for the latest version and prompts the user to download a new version if available. This can be inactivated in SeoTools.config.xml.</p>
<p>- Improved the <a href="http://nielsbosma.se/projects/seotools/functions/responsetime/">ResponseTime</a> function with two additional (optional) parameters: iterations (default 1) and pauseBetweenIterations (default 1000).The ResponseTime function returns the median of the values collected in each iteration.</p>
<p>=ResponseTime(&#8220;http://offerta.se&#8221;;10;1000)</p>
<p>Will measure the responsetime of offerta.se 10 times with 1000ms between each iteration and return the median response time.</p>
<p>- Improved <a href="http://nielsbosma.se/projects/seotools/functions/resolveip/">ResolvedIp</a> using &#8220;host&#8221; property in <a href="http://nielsbosma.se/projects/seotools/functions/urlproperty/">UrlProperty</a> so i.e.: =ResolveIp(&#8220;http://mydomain.com/file.aspx&#8221;) works. Same for <a href="http://nielsbosma.se/projects/seotools/functions/googleindexcount/">GoogleIndexCount</a>, <a href="http://nielsbosma.se/projects/seotools/functions/whois/">WhoIs</a> and <a href="http://nielsbosma.se/projects/seotools/functions/isdomainregistered/">IsDomainRegistered</a>.</p>
<p>- Improved the <a href="http://nielsbosma.se/projects/seotools/functions/format/">Format</a> function to fully support .Net composite formatting (string.Format).</p>
<p>=Format(&#8220;{0:0.00}&#8221;,123.4567) =&gt; &#8220;123.46&#8243;<br />
=Format(&#8220;{0:0000}&#8221;,3) =&gt; &#8220;0003&#8243;</p>
<p>For full syntax reference: <a href="http://msdn.microsoft.com/en-us/library/txafckwd.aspx">http://msdn.microsoft.com/en-us/library/txafckwd.aspx</a></p>
]]></content:encoded>
			<wfw:commentRss>http://nielsbosma.se/2011/09/19/office-64bit-version-w3cvalidate-and-domainage-in-new-seotools-2-2/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>SeoTools v2.1 with backlink checker and text-to-code ratio metrics</title>
		<link>http://nielsbosma.se/2011/08/30/seotools-v2-1-with-backlink-checker-and-text-to-code-ratio-metrics/</link>
		<comments>http://nielsbosma.se/2011/08/30/seotools-v2-1-with-backlink-checker-and-text-to-code-ratio-metrics/#comments</comments>
		<pubDate>Tue, 30 Aug 2011 18:59:56 +0000</pubDate>
		<dc:creator>nielsbosma</dc:creator>
				<category><![CDATA[SEO]]></category>
		<category><![CDATA[SeoTools]]></category>

		<guid isPermaLink="false">http://nielsbosma.se/?p=240</guid>
		<description><![CDATA[<p>I&#8217;ve uploaded a new release of SeoTools with some interesting features.</p> <p>Some of these features have been added thanks to suggestions from SeoTools users. If you&#8217;re missing anything please let me know. Remember donators get their feature suggestions prioritized. </p> <p>Following new features and improvements has been added in 2.1: </p> CheckBacklink(string pageUrl, string expectedLinkHref, [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve uploaded a new release of SeoTools with some interesting features.</p>
<p>Some of these features have been added thanks to suggestions from SeoTools users. If you&#8217;re missing anything please let me know. Remember donators get their feature suggestions prioritized.
</p>
<p>Following new features and improvements has been added in 2.1:
</p>
<h3>CheckBacklink(string pageUrl, string expectedLinkHref, [string expectedLinkText], [bool checkNofollow])<br />
</h3>
<p>Verifies that a backlink is present on a page with the correct link text and that there&#8217;s no rel=nofollow.
</p>
<p>This is a very useful function when validating that links you have &#8220;acquired&#8221; are still present.
</p>
<p>Example:<br/><span style="font-family:Courier New; font-size:10pt">=CheckBacklink(&#8220;http://linkdirectory.com/subpage&#8221;;&#8221;http://mypage.com/&#8221;;&#8221;An awesome page&#8221;;FALSE)</span>
	</p>
<p>In the example we verify that there a link to &#8220;http://mypage.com&#8221; on &#8220;http://linkdirectory.com/subpage&#8221; with the anchorText &#8220;An awesome page&#8221; and that this link is not rel=nofollow.
</p>
<h3>IsFoundOnPage(string pageUrl, string countOccurrencesOfString, [bool ignoreCase])<br />
</h3>
<p>Returns the number of occurrences a string can be found on a page.
</p>
<p>Example: Check that Google analytics tracking is present on you page:<br/><span style="font-family:Courier New; font-size:10pt">=IsFoundOnPage(&#8220;http://offerta.se&#8221;;&#8221;google-analytics.com/ga.js&#8221;)</span>
	</p>
<h3>HtmlMetaRobots(string url)<br />
</h3>
<p>Returns HTML meta robots on a page (cached).
</p>
<h3>HtmlMeta(sting url, string metaName)<br />
</h3>
<p>Returns arbitrary HTML meta content on a page (cached).
</p>
<p><a href="http://webdesign.about.com/od/metataglibraries/a/use_meta_tags.htm">Common meta tags</a>:
</p>
<ul>
<li>author
</li>
<li>googlebot
</li>
<li>robots
</li>
<li>keywords
</li>
<li>description
</li>
<li>refresh
</li>
<li>copyright
</li>
<li>contact
</li>
<li>last-modified
</li>
<li>cache-control
</li>
<li>content-language
</li>
<li>content-type
</li>
<li>expires
</li>
<li>pragma
</li>
</ul>
<p>Examples:<br/><span style="font-family:Courier New; font-size:10pt">=HtmlMeta(&#8220;http://offerta.se&#8221;;&#8221;author&#8221;);</span><br/><span style="font-family:Courier New; font-size:10pt">=HtmlMeta(&#8220;http://offerta.se&#8221;;&#8221;googlebot&#8221;)</span>
	</p>
<h3>HtmlCanonical(sting url)<br />
</h3>
<p>Returns the HTML canonical on a page (cached).
</p>
<h3>PageSize(string pageUrl)<br />
</h3>
<p>Returns page size in bytes (cached).
</p>
<h3>PageTextSize(string pageUrl)<br />
</h3>
<p>Returns page text size in bytes (cached).
</p>
<p>Calculates how much of the page source is text. Compared to other tools available online my version is quite restrictive, counting as little as possible. If you&#8217;re technically interested, I&#8217;m discussing this on <a href="http://stackoverflow.com/questions/7220065/seo-good-algorithm-for-text-to-code-ratio">stackoverflow</a>. (I might change the algorithm in the future to be less restrictive and more aligned with other tools.)
</p>
<h3>PageCodeSize(string pageUrl)<br />
</h3>
<p>Returns page code size in bytes (cached).
</p>
<h3>PageCodeToTextRatio(string pageUrl)<br />
</h3>
<p>Returns page code to text ratio (cached). Same as PageTextSize(pageUrl)/PageCodeSize(pageUrl).
</p>
<h3>PageEncoding(string pageUrl)<br />
</h3>
<p>Returns the page encoding detected by SeoTools.
</p>
<h3>HttpHeader(string pageUrl, string headerName)<br />
</h3>
<p>Returns response HTTP header (cached).
</p>
<p>Example:<br/><span style="font-family:Courier New; font-size:10pt">=HttpHeader(&#8220;http://google.com&#8221;;&#8221;Content-Type&#8221;) =&gt; text/html; charset=ISO-8859-1</span>
	</p>
<h3>Mics<br />
</h3>
<p>Added 1000ms sleep in GooglePageRank and GooglePlusCount to avoid your IP getting blocked by Google when performing a lot of lookups.
</p>
<p><a href="http://nielsbosma.se/projects/seotools/">Download SeoTools.</a>
	</p>
]]></content:encoded>
			<wfw:commentRss>http://nielsbosma.se/2011/08/30/seotools-v2-1-with-backlink-checker-and-text-to-code-ratio-metrics/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>New release of SeoTools!</title>
		<link>http://nielsbosma.se/2011/08/20/new-release-of-seotools/</link>
		<comments>http://nielsbosma.se/2011/08/20/new-release-of-seotools/#comments</comments>
		<pubDate>Sat, 20 Aug 2011 10:30:34 +0000</pubDate>
		<dc:creator>nielsbosma</dc:creator>
				<category><![CDATA[SEO]]></category>

		<guid isPermaLink="false">http://nielsbosma.se/?p=221</guid>
		<description><![CDATA[<p>Added a new Ribbons interface. Checkout the &#8220;Donate&#8221; button </p> <p><a href="http://nielsbosma.se/wp-content/uploads/2011/08/screenshot02.png"></a></p> <p>Added optional parameter &#8220;attribute&#8221; To XPathOnUrl method for selecting attributes on nodes.<br /> Example:<br /> =XPathOnUrl(&#8220;http://www.google.com/search?q=example&#8221;;&#8221;(//a)[1]&#8220;;&#8221;href&#8221;)</p> <p>Added new function SqlFirst(string SqlQuery)Returns the first column of the first row in the result of a SQL query. Requires that you setup a ConnectionString in SeoTools.config.xml. [...]]]></description>
			<content:encoded><![CDATA[<p>Added a new Ribbons interface. Checkout the &#8220;Donate&#8221; button <img src='http://nielsbosma.se/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p><a href="http://nielsbosma.se/wp-content/uploads/2011/08/screenshot02.png"><img src="http://nielsbosma.se/wp-content/uploads/2011/08/screenshot02.png" border="0" alt="" /></a></p>
<p>Added optional parameter &#8220;attribute&#8221; To XPathOnUrl method for selecting attributes on nodes.<br />
Example:<br />
<span style="font-family: Courier New; font-size: 10pt;">=XPathOnUrl(&#8220;http://www.google.com/search?q=example&#8221;;&#8221;(//a)[1]&#8220;;&#8221;href&#8221;)</span></p>
<p>Added new function SqlFirst(string SqlQuery)Returns the first column of the first row in the result of a SQL query. Requires that you setup a ConnectionString in SeoTools.config.xml. Works great together with Format.<br />
Example:<br />
<span style="font-family: Courier New; font-size: 10pt;">=SqlFirst(Format(&#8220;SELECT Id FROM Clients WHERE Email=&#8217;{0}&#8217; AND Password=&#8217;{1}&#8217;&#8221;;A1:A2))</span></p>
<p>Added new function StringJoin(string separator; vector data) Returns concatenated string of a vector with specified separator.<br />
Example:<br />
<span style="font-family: Courier New; font-size: 10pt;">A<br />
1 Niels<br />
2 Frida<br />
3 Julia<br />
=StringJoin(&#8220;, &#8220;;A1:A3)<br />
Returns &#8220;Niels, Frida, Julia&#8221;</span></p>
<p>Added optional parameter to FacebookLikes(string url; [string specific]) Where you can specify either &#8220;total&#8221; (default), &#8220;shares&#8221;, &#8220;likes&#8221; or &#8220;comments&#8221;.<br />
Example:<br />
<span style="font-family: Courier New; font-size: 10pt;">=FacebookLikes(&#8220;http://offerta.se&#8221;;&#8221;shares&#8221;);</span></p>
<p>Added new function GooglePlusCount(string url) Retrieves the Google+ count for an url.<br />
Example:<br />
<span style="font-family: Courier New; font-size: 10pt;">=GooglePlusCount(&#8220;http://yahoo.com&#8221;)</span></p>
<p>Added new function TwitterCount(string url) Retrieves the number of times an url has been tweeted.<br />
Example:<br />
<span style="font-family: Courier New; font-size: 10pt;">=TwitterCount(&#8220;http://nielsbosma.se&#8221;)</span></p>
<p>Added &#8220;Generate link report&#8230;&#8221;  found in the &#8220;Onpage&#8221; menu.<br />
<a href="http://nielsbosma.se/wp-content/uploads/2011/08/generatelinkreport.png"><img src="http://nielsbosma.se/wp-content/uploads/2011/08/generatelinkreport.png" border="0" alt="" /></a></p>
<p>Added new function GoogleLinkCount(string url) Returns an approximation of the number of backlinks indexed by Google. (Similar to searching for links: in Google.)</p>
<p>Download from <a href="http://nielsbosma.se/projects/seotools/">SeoTools project page</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://nielsbosma.se/2011/08/20/new-release-of-seotools/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Retreive Google+ count using C#</title>
		<link>http://nielsbosma.se/2011/08/13/retreive-google-count-using-c/</link>
		<comments>http://nielsbosma.se/2011/08/13/retreive-google-count-using-c/#comments</comments>
		<pubDate>Sat, 13 Aug 2011 07:58:14 +0000</pubDate>
		<dc:creator>nielsbosma</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[SEO]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[Google+]]></category>

		<guid isPermaLink="false">http://nielsbosma.se/?p=199</guid>
		<description><![CDATA[<p>In my work with <a href="http://nielsbosma.se/projects/seotools">SeoTools</a> I&#8217;m adding a Excel function for retreiving a page&#8217;s Google+ count (on request by <a href="http://seogadget.co.uk/amazing-seo-tools-for-excel/">@richardbaxterseo</a>) and I found an excellent <a href="http://www.strategyinternetmarketing.co.uk/get-a-url-google-count-via-php/">implementation in PHP</a>.</p> <p>In the spirit of sharing, here&#8217;s a port in C#:</p> private static Regex REGEX_GETURLCOUNT = new Regex(@"&#60;div[^&#62;]+id=""aggregateCount""[^&#62;]+&#62;(\d*)&#60;/div&#62;"); public static int GetUrlCount(string url) { string [...]]]></description>
			<content:encoded><![CDATA[<p>In my work with <a href="http://nielsbosma.se/projects/seotools">SeoTools</a> I&#8217;m adding a Excel function for retreiving a page&#8217;s Google+ count (on request by <a href="http://seogadget.co.uk/amazing-seo-tools-for-excel/">@richardbaxterseo</a>) and I found an excellent <a href="http://www.strategyinternetmarketing.co.uk/get-a-url-google-count-via-php/">implementation in PHP</a>.</p>
<p>In the spirit of sharing, here&#8217;s a port in C#:</p>
<pre class="brush:csharp">private static Regex REGEX_GETURLCOUNT =
    new Regex(@"&lt;div[^&gt;]+id=""aggregateCount""[^&gt;]+&gt;(\d*)&lt;/div&gt;");

public static int GetUrlCount(string url)
{
    string fetchUrl =
        "https://plusone.google.com/u/0/_/+1/fastbutton?url="+
        HttpUtility.UrlEncode(url)+"&amp;count=true";
    HttpWebRequest request =
        (HttpWebRequest)WebRequest.Create(fetchUrl);
    string response = new StreamReader(request.GetResponse()
        .GetResponseStream()).ReadToEnd();
    Match match = REGEX_GETURLCOUNT.Match(response);
    if (match.Success)
    {
        return int.Parse(match.Groups[1].Value);
    }
    return 0;
}</pre>
<p>And while I&#8217;m at it, here&#8217;s how to get the number of times an url has been tweeted:</p>
<pre class="brush:csharp">private static Regex REGEX_GETURLCOUNT =
    new Regex(@"<url_count>(\d+)</url_count>");

public static int GetUrlCount(string url)
{
    string fetchUrl = "http://api.tweetmeme.com/url_info?url=" +
        HttpUtility.UrlEncode(url);

    HttpWebRequest request = (HttpWebRequest)WebRequest.Create(fetchUrl);
    string response = new StreamReader(request.GetResponse()
        .GetResponseStream()).ReadToEnd();

    Match match = REGEX_GETURLCOUNT.Match(response);
    if (match.Success)
    {
        return int.Parse(match.Groups[1].Value);
    }
    return 0;
}
</pre>
]]></content:encoded>
			<wfw:commentRss>http://nielsbosma.se/2011/08/13/retreive-google-count-using-c/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Working with regular expressions in Excel</title>
		<link>http://nielsbosma.se/2011/03/06/working-with-regular-expressions-in-excel/</link>
		<comments>http://nielsbosma.se/2011/03/06/working-with-regular-expressions-in-excel/#comments</comments>
		<pubDate>Sun, 06 Mar 2011 09:33:28 +0000</pubDate>
		<dc:creator>nielsbosma</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Excel plugin]]></category>
		<category><![CDATA[Regular expressions]]></category>

		<guid isPermaLink="false">http://nielsbosma.se/?p=128</guid>
		<description><![CDATA[<p><a href="http://www.codeproject.com/KB/dotnet/regextutorial.aspx">Regular expressions</a> can be very useful for validating and manipulating data. Unfortunately there&#8217;s no built in support for regular expressions in Excel. You can use <a href="http://answers.yahoo.com/question/index?qid=20080714202911AAOn4lD">VBA</a> but I think that&#8217;s a bit too messy. </p> <p>In my Excel plugin <a href="http://nielsbosma.se/projects/seotools/">SeoTools</a>, I&#8217;ve added four methods: </p> <p>=RegexpIsMatch(string input; string expr)</p> <p>Matches an input [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.codeproject.com/KB/dotnet/regextutorial.aspx">Regular expressions</a> can be very useful for validating and manipulating data. Unfortunately there&#8217;s no built in support for regular expressions in Excel. You can use <a href="http://answers.yahoo.com/question/index?qid=20080714202911AAOn4lD">VBA</a> but I think that&#8217;s a bit too messy.
</p>
<p>In my Excel plugin <a href="http://nielsbosma.se/projects/seotools/">SeoTools</a>, I&#8217;ve added four methods:
</p>
<div>
<table style="border-collapse:collapse" border="0">
<colgroup>
<col style="width:180px"/>
<col style="width:374px"/></colgroup>
<tbody valign="top">
<tr style="height: 36px">
<td style="padding-left: 7px; padding-right: 7px; border-top:  solid 0.5pt; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p><span style="font-family:Courier New; font-size:9pt">=RegexpIsMatch(string input; string expr)</span></p>
</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  solid 0.5pt; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>Matches an input string with a regular expression and returns true if there&#8217;s a match. </p>
</td>
</tr>
<tr style="height: 45px">
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p><span style="font-family:Courier New; font-size:9pt">=RegexpFind(string input; string expr; int group)</span></p>
</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>Takes a regular expression and retrieves the matched group from an input string.</p>
</td>
</tr>
<tr style="height: 45px">
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p><span style="font-family:Courier New; font-size:9pt">=RegexpFindOnUrl(string url; string regexp; int group)</span></p>
</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>Same as RegexpFind but the input string is instead the contents of a webpage.</p>
</td>
</tr>
<tr style="height: 45px">
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p><span style="font-family:Courier New; font-size:9pt">=RegexpReplace(string input; string expr; string replacement)</span></p>
</td>
<td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">
<p>Within a specified input string, replaces all strings that match a specified regular expression with a specified replacement string.</p>
</td>
</tr>
</tbody>
</table>
</div>
<p>All examples below assume that you have downloaded and added <a href="http://nielsbosma.se/projects/seotools/">SeoTools</a> to the document you&#8217;re working on.
</p>
<h2>Example1 Validating email addresses with RegexpIsMatch<br />
</h2>
<p>Let&#8217;s say you have a column with a bunch of email addresses and you want to find all invalid addresses. The following formula will return FALSE for all invalid email addresses:
</p>
<p><span style="font-family:Courier New; font-size:9pt">=RegexpIsMatch(&#8220;niels@bosmainteractive.se&#8221;;&#8221;^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,6}$&#8221;<br />
</span></p>
<p><img src="http://nielsbosma.se/wp-content/uploads/2011/03/030611_1033_Workingwith121.png" alt=""/><span style="font-family:Courier New; font-size:9pt"><br />
		</span></p>
<h2>Example2 Find a particular part in a text<br />
</h2>
<p>Now let&#8217;s say you have a column with text where you&#8217;d like to extract a particular part from, i.e. &#8220;Sports (id:4)&#8221;, where we like to extract the &#8220;4&#8243; into a new column.
</p>
<p><span style="font-family:Courier New; font-size:9pt">=RegexpFind(A1;&#8221;\(id:(\d+)\)&#8221;;1)<br />
</span></p>
<p><img src="http://nielsbosma.se/wp-content/uploads/2011/03/030611_1033_Workingwith27.png" alt=""/><span style="font-family:Courier New; font-size:9pt"><br />
		</span></p>
<h2>Example3 Get the number of pages indexed in Google for a set of keywords<br />
</h2>
<p>For the last example we try some simple <a href="http://en.wikipedia.org/wiki/Web_scraping">web scraping</a> using the regular expression support in <a href="http://nielsbosma.se/projects/seotools/">SeoTools</a>. In our example we have a set of keywords and want to have the formula return the number of pages a search returns.
</p>
<p><img src="http://nielsbosma.se/wp-content/uploads/2011/03/030611_1033_Workingwith35.png" alt=""/>
	</p>
<h2><span style="font-family:Courier New; font-size:9pt">=RegexpFindOnUrl(&#8220;http://www.google.com/search?q=&#8221;&amp;UrlEncode(A1);&#8221;About ([0-9,]*) results&#8221;;1)<br />
</span></h2>
<p>With functions in <a href="http://nielsbosma.se/projects/seotools/">SeoTools</a> that are marked with &#8220;(cached)&#8221; (such RegexpFindOnUrl) the URL is only fetched once per &#8220;session&#8221;. So if you have several pieces you want to extract from a webpage the source of the page is only downloaded once even if you reference the URL several times in different formulas.  <span style="font-family:Courier New; font-size:9pt"><br />
		</span></p>
<h2>Resources for working with regular expressions<span style="font-family:Courier New; font-size:9pt"><br />
		</span></h2>
<ul>
<li><a href="http://www.regular-expressions.info/reference.html">.Net regular expressions</a>.
</li>
<li>At <a href="http://regexlib.com">Regexlib.com</a> your can find a bunch of regular expressions that you can use for validating different types of data.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://nielsbosma.se/2011/03/06/working-with-regular-expressions-in-excel/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
	</channel>
</rss>
