<?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>crribs.com</title>
	<atom:link href="http://crribs.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://crribs.com</link>
	<description>the blog of brad shultz, systems design, RETS development, ETL, scripting, and windows task scheduler stuff</description>
	<lastBuildDate>Thu, 01 Jul 2010 20:28:43 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>Read this and thought it was incredibly insightful-</title>
		<link>http://crribs.com/2010/07/read-this-and-thought-it-was-incredibly-insightful/</link>
		<comments>http://crribs.com/2010/07/read-this-and-thought-it-was-incredibly-insightful/#comments</comments>
		<pubDate>Thu, 01 Jul 2010 20:08:59 +0000</pubDate>
		<dc:creator>bshultz</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Insight]]></category>
		<category><![CDATA[Intelligent People Rock the World]]></category>
		<category><![CDATA[Productivity]]></category>

		<guid isPermaLink="false">http://crribs.com/2010/07/read-this-and-thought-it-was-incredibly-insightful/</guid>
		<description><![CDATA[Exemplify Excellence : Its almost ironic how effective we can be in the last minutes of accomplishing something. The thing is, it was not the external world that brought out our efficacy, it was our perception of what needed to be done. Quoted From: http://highestfaculties.wordpress.com/2009/04/26/defeating-student-syndrome-for-productivity/]]></description>
			<content:encoded><![CDATA[<p>Exemplify Excellence : Its almost ironic how effective we can be in the last minutes of accomplishing something. The thing is, it was not the external world that brought out our efficacy, it was our perception of what needed to be done.</p>
<p>Quoted From: http://highestfaculties.wordpress.com/2009/04/26/defeating-student-syndrome-for-productivity/</p>
]]></content:encoded>
			<wfw:commentRss>http://crribs.com/2010/07/read-this-and-thought-it-was-incredibly-insightful/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Displaying Windows Task Scheduler Tasks with PHP</title>
		<link>http://crribs.com/2010/07/displaying-windows-task-scheduler-tasks-with-php/</link>
		<comments>http://crribs.com/2010/07/displaying-windows-task-scheduler-tasks-with-php/#comments</comments>
		<pubDate>Thu, 01 Jul 2010 18:51:00 +0000</pubDate>
		<dc:creator>bshultz</dc:creator>
				<category><![CDATA[Scheduled Task Management]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[windows task scheduler]]></category>
		<category><![CDATA[PHP View Window's Scheduled Task]]></category>

		<guid isPermaLink="false">http://crribs.com/2010/07/displaying-windows-task-scheduler-tasks-with-php/</guid>
		<description><![CDATA[Excellent writeup of a PHP app that interfaces with the Windows Task Scheduler.  I&#8217;m going to have to double check on his use of the Task Service object.  I thought it was only COM accessible in Task Scheduler 2.0 (the new version, that comes with Vista or Windows 7, or Server 2008).  I thought in [...]]]></description>
			<content:encoded><![CDATA[<p>Excellent writeup of a PHP app that interfaces with the Windows Task Scheduler.  I&#8217;m going to have to double check on his use of the Task Service object.  I thought it was only COM accessible in Task Scheduler 2.0 (the new version, that comes with Vista or Windows 7, or Server 2008).  I thought in XP (which included the Task Scheduler 1.0 &#8211; the schtasks.exe or the good old Scheduled Task&#8217;s folder) that either the Task Service COM interface had to be accessed with a lower level language, or possibly the Scheduled Task&#8217;s accessible via WMI (but not through the schtask folder interface).  Its possible thats the task scheduler this code uses for access.  If thats the reality, then you may not see all the tasks you may have entered using the GUI interface, using this tool.  More on that later.<br />
<a href="http://codesnob.wordpress.com/2009/05/18/displaying-windows-task-scheduler-tasks-with-php/" target="_blank"> http://codesnob.wordpress.com/2009/05/18/displaying-windows-task-scheduler-tasks-with-php/</a></p>
]]></content:encoded>
			<wfw:commentRss>http://crribs.com/2010/07/displaying-windows-task-scheduler-tasks-with-php/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Google Analytics Api with VBScript &#8211; Retrieving all Profile Numbers</title>
		<link>http://crribs.com/2010/05/google-analytics-api-with-vbscript-retrieving-all-profile-numbers/</link>
		<comments>http://crribs.com/2010/05/google-analytics-api-with-vbscript-retrieving-all-profile-numbers/#comments</comments>
		<pubDate>Wed, 26 May 2010 23:21:10 +0000</pubDate>
		<dc:creator>bshultz</dc:creator>
				<category><![CDATA[analytics]]></category>
		<category><![CDATA[tools and utilities]]></category>
		<category><![CDATA[unique concepts]]></category>
		<category><![CDATA[vbscript]]></category>
		<category><![CDATA[Google Analytics Api]]></category>
		<category><![CDATA[scripting]]></category>

		<guid isPermaLink="false">http://crribs.com/?p=94</guid>
		<description><![CDATA[This vbscript will retrieve all of the website&#8217;s profile numbers for your google analytics account.  Borrowed some code from http://mikaelspage.blogspot.com/2009/08/excel-functions-for-fetching-data.html Changed a lot of code myself.  Removed some functions there may be remnants of them in there.  It does work though, and seems to be the only example on the web of doing this with [...]]]></description>
			<content:encoded><![CDATA[<p>This vbscript will retrieve all of the website&#8217;s profile numbers for your google analytics account.  Borrowed some code from <a href="http://mikaelspage.blogspot.com/2009/08/excel-functions-for-fetching-data.html">http://mikaelspage.blogspot.com/2009/08/excel-functions-for-fetching-data.html</a></p>
<p>Changed a lot of code myself.  Removed some functions there may be remnants of them in there.  It does work though, and seems to be the only example on the web of doing this with VBScript.  Enjoy.</p>
<p><span><span>&#8216;**********************************************************************</span><br />
<span>&#8216;*  Get Google Analytics Profiles </span><br />
<span>&#8216;************************************************************************</span></p>
<p><span>Call</span><span> Main</span><span>()</span></p>
<p><span>Sub</span><span> Main</span><span>()</span></p>
<p><span>email</span><span> = </span><span>&#8220;youremail@gmail.com&#8221;</span><br />
<span>password</span><span> = </span><span>&#8220;password&#8221;</span><br />
<span>token</span><span> = getGAauthenticationToken</span><span>(email</span><span>, password</span><span>)</span></p>
<p><span>getGAaccountData</span><span> token</span><span>, </span><span>&#8220;False&#8221;</span></p>
<p><span>End</span><span> </span><span>Sub</span></p>
<p><span>Sub</span><span> getGAaccountData</span><span>(authToken</span><span>, includeHeaders</span><span>)</span><br />
<span> </span><br />
<span> </span><span>If</span><span> authToken</span><span> = </span><span>&#8220;Authentication failed&#8221;</span><span> </span><span>Then</span><br />
<span> getGAprofiles</span><span> = </span><span>&#8220;Authentication failed&#8221;</span><br />
<span> WScript.Echo</span><span> </span><span>&#8220;Authentication failed&#8221;</span><br />
<span> </span><span>Exit</span><span> </span><span>sub</span><br />
<span> </span><span>End</span><span> </span><span>If</span><span> </span><br />
<span> tempFile</span><span> = </span><span>&#8220;c:\googleAnalytics_Temp.txt&#8221;</span><br />
<span> </span><span>Set</span><span> fso</span><span> = </span><span>CreateObject</span><span>(</span><span>&#8220;scripting.filesystemobject&#8221;</span><span>)</span><br />
<span> </span><span>If</span><span> fso.FileExists</span><span>(tempfile</span><span>) </span><span>Then</span><span> fso.DeleteFile</span><span>(tempFile</span><span>)</span><br />
<span> </span><span>Set</span><span> fileTemp</span><span> = fso.OpenTextFile</span><span>(tempFile</span><span>, </span><span>8</span><span>, </span><span>True</span><span>)</span><br />
<span> </span><br />
<span> fileTemp.WriteLine</span><span> </span><span>chr</span><span>(</span><span>34</span><span>) &amp; </span><span>&#8220;AccountName&#8221;</span><span>&#8220; , &#8221;</span><span>&#8220;ProfileNumber&#8221;</span><span>&#8220; , &#8221;</span><span>&#8220;ProfileTitle&#8221;</span><span> &amp; </span><span>chr</span><span>(</span><span>34</span><span>)</span><br />
<span> </span><br />
<span> URL</span><span> = </span><span>&#8220;https://www.google.com/analytics/feeds/accounts/default&#8221;</span><br />
<span> </span><span>Set</span><span> objhttp</span><span> = </span><span>CreateObject</span><span>(</span><span>&#8220;MSXML2.ServerXMLHTTP&#8221;</span><span>)</span><br />
<span> </span><br />
<span> objhttp.Open</span><span> </span><span>&#8220;GET&#8221;</span><span>, URL</span><span>, </span><span>False</span><br />
<span> objhttp.setRequestHeader</span><span> </span><span>&#8220;Content-type&#8221;</span><span>, </span><span>&#8220;application/x-www-form-urlencoded&#8221;</span><br />
<span> objhttp.setRequestHeader</span><span> </span><span>&#8220;Authorization&#8221;</span><span>, </span><span>&#8220;GoogleLogin Auth=&#8221;</span><span> &amp; authToken</span><br />
<span> objhttp.send</span><span> (</span><span>&#8220;&#8221;</span><span>)</span><br />
<span> </span><br />
<span> gaResponse</span><span> = objhttp.responseText</span></p>
<p><span> </span><span>If</span><span> </span><span>InStr</span><span>(</span><span>1</span><span>, gaResponse</span><span>, </span><span>&#8220;Token invalid&#8221;</span><span>) &gt; </span><span>0</span><span> </span><span>Or</span><span> </span><span>InStr</span><span>(</span><span>1</span><span>, gaResponse</span><span>, </span><span>&#8220;Authorization required&#8221;</span><span>) &gt; </span><span>0</span><span> </span><span>Then</span><br />
<span> getGAprofiles</span><span> = </span><span>&#8220;Authentication failed&#8221;</span><br />
<span> </span><span>Exit</span><span> </span><span>sub</span><br />
<span> </span><span>End</span><span> </span><span>If</span></p>
<p><span> </span><span>Set</span><span> XMLdoc</span><span> = </span><span>CreateObject</span><span>(</span><span>&#8220;MSXML2.DOMDocument&#8221;</span><span>)</span><br />
<span> XMLdoc.LoadXML</span><span>(objhttp.responseText</span><span>)</span><br />
<span> </span><span>Set</span><span> theRoot</span><span> = XMLdoc.DocumentElement</span><br />
<span> </span><span>Set</span><span> children</span><span> = theRoot.ChildNodes</span></p>
<p><span> rivi</span><span> = </span><span>1</span><br />
<span> </span><span>For</span><span> </span><span>Each</span><span> child</span><span> </span><span>In</span><span> children</span><br />
<span> </span><span>If</span><span> child.nodeName</span><span> = </span><span>&#8220;openSearch:totalResults&#8221;</span><span> </span><span>Then</span><br />
<span> riveja</span><span> = </span><span>CInt</span><span>(child.Text</span><span>)</span><br />
<span> </span><span>If</span><span> includeHeaders</span><span> = </span><span>True</span><span> </span><span>Then</span><br />
<span> </span><span>ReDim</span><span> TempArray</span><span>(riveja</span><span>, </span><span>2</span><span>)</span><br />
<span> </span><span>Else</span><br />
<span> </span><span>ReDim</span><span> TempArray</span><span>(riveja</span><span>, </span><span>2</span><span>)</span><br />
<span> </span><span>End</span><span> </span><span>If</span><br />
<span> </span><span>End</span><span> </span><span>If</span></p>
<p><span> </span><span>If</span><span> child.nodeName</span><span> = </span><span>&#8220;entry&#8221;</span><span> </span><span>Then</span><br />
<span> </span><br />
<span> </span><span>Set</span><span> children2</span><span> = child.ChildNodes</span><br />
<span> </span><span>For</span><span> </span><span>Each</span><span> child2</span><span> </span><span>In</span><span> children2</span><br />
<span> </span><span>If</span><span> child2.nodeName</span><span> = </span><span>&#8220;dxp:property&#8221;</span><span> </span><span>Then</span><br />
<span> </span><span>Set</span><span> attribuutit</span><span> = child2.Attributes</span><br />
<span> </span><span>If</span><span> attribuutit.getNamedItem</span><span>(</span><span>&#8220;name&#8221;</span><span>).Text</span><span> = </span><span>&#8220;ga:accountName&#8221;</span><span> </span><span>Then</span><span> TempArray</span><span>(rivi</span><span>, </span><span>0</span><span>) = attribuutit.getNamedItem</span><span>(</span><span>&#8220;value&#8221;</span><span>).text</span><br />
<span> </span><br />
<span> </span><span>End</span><span> </span><span>If</span></p>
<p><span> </span><span>If</span><span> child2.nodeName</span><span> = </span><span>&#8220;dxp:tableId&#8221;</span><span> </span><span>Then</span><span> TempArray</span><span>(rivi</span><span>, </span><span>2</span><span>) = </span><span>CDbl</span><span>(</span><span>Replace</span><span>(child2.Text</span><span>, </span><span>&#8220;ga:&#8221;</span><span>, </span><span>&#8220;&#8221;</span><span>))</span><br />
<span> </span><br />
<span> </span><span>If</span><span> child2.nodeName</span><span> = </span><span>&#8220;title&#8221;</span><span> </span><span>Then</span><span> TempArray</span><span>(rivi</span><span>, </span><span>1</span><span>) = child2.text</span><br />
<span> </span><br />
<span> </span><span>Next</span><br />
<span> fileTemp.Write</span><span> </span><span>chr</span><span>(</span><span>34</span><span>) &amp; TempArray</span><span>(rivi</span><span>, </span><span>0</span><span>)</span><br />
<span> fileTemp.Write</span><span> </span><span>chr</span><span>(</span><span>34</span><span>) &amp; </span><span>&#8220; , &#8221;</span><span> &amp; </span><span>chr</span><span>(</span><span>34</span><span>) &amp; TempArray</span><span>(rivi</span><span>, </span><span>2</span><span>) </span><br />
<span> fileTemp.Write</span><span> </span><span>chr</span><span>(</span><span>34</span><span>) &amp; </span><span>&#8220; , &#8221;</span><span> &amp; </span><span>chr</span><span>(</span><span>34</span><span>) &amp; TempArray</span><span>(rivi</span><span>, </span><span>1</span><span>) &amp; </span><span>chr</span><span>(</span><span>34</span><span>) &amp; </span><span>vbnewline</span><br />
<span> rivi</span><span> = rivi</span><span> + </span><span>1</span><br />
<span> </span><span>End</span><span> </span><span>If</span><br />
<span> </span><br />
<span> </span><span>If</span><span> includeHeaders</span><span> = </span><span>True</span><span> </span><span>Then</span><br />
<span> TempArray</span><span>(</span><span>0</span><span>, </span><span>0</span><span>) = </span><span>&#8220;AccountName&#8221;</span><span> </span><br />
<span> TempArray</span><span>(</span><span>0</span><span>, </span><span>1</span><span>) = </span><span>&#8220;ProfileTitle&#8221;</span><span> </span><br />
<span> TempArray</span><span>(</span><span>0</span><span>, </span><span>2</span><span>) = </span><span>&#8220;ProfileNumber&#8221;</span><br />
<span> </span><span>End</span><span> </span><span>If</span><br />
<span> </span><br />
<span> getGAprofiles</span><span> = TempArray</span><br />
<span> </span><br />
<span> </span><span>Next</span></p>
<p><span>End</span><span> </span><span>sub</span></p>
<p><span>Function</span><span> getGAauthenticationToken</span><span>(email</span><span>, password</span><span>)</span><br />
<span> </span><span>If</span><span> email</span><span> = </span><span>&#8220;&#8221;</span><span> </span><span>Then</span><br />
<span> getGAauthenticationToken</span><span> = </span><span>&#8220;&#8221;</span><br />
<span> </span><span>Exit</span><span> </span><span>Function</span><br />
<span> </span><span>End</span><span> </span><span>If</span></p>
<p><span> </span><span>If</span><span> password</span><span> = </span><span>&#8220;&#8221;</span><span> </span><span>Then</span><br />
<span> getGAauthenticationToken</span><span> = </span><span>&#8220;Input password&#8221;</span><br />
<span> </span><span>Exit</span><span> </span><span>Function</span><br />
<span> </span><span>End</span><span> </span><span>If</span><br />
<span> </span><br />
<span> CurChr</span><span> = </span><span>1</span></p>
<p><span> </span><span>Set</span><span> objhttp</span><span> = </span><span>CreateObject</span><span>(</span><span>&#8220;MSXML2.ServerXMLHTTP&#8221;</span><span>)</span><br />
<span> URL</span><span> = </span><span>&#8220;https://www.google.com/accounts/ClientLogin&#8221;</span><br />
<span> objhttp.Open</span><span> </span><span>&#8220;POST&#8221;</span><span>, URL</span><span>, </span><span>False</span><br />
<span> objhttp.setRequestHeader</span><span> </span><span>&#8220;Content-type&#8221;</span><span>, </span><span>&#8220;application/x-www-form-urlencoded&#8221;</span><br />
<span> objhttp.send</span><span> (</span><span>&#8220;accountType=GOOGLE&amp;Email=&#8221;</span><span> &amp; email</span><span> &amp; </span><span>&#8220;&amp;Passwd=&#8221;</span><span> &amp; password</span><span> &amp; </span><span>&#8220;&amp;service=analytics&amp;Source=InternetEngineKPI&#8221;</span><span>)</span></p>
<p><span> authResponse</span><span> = objhttp.responseText</span></p>
<p><span> </span><span>If</span><span> </span><span>InStr</span><span>(</span><span>1</span><span>, authResponse</span><span>, </span><span>&#8220;BadAuthentication&#8221;</span><span>) = </span><span>0</span><span> </span><span>Then</span><br />
<span> authTokenStart</span><span> = </span><span>InStr</span><span>(</span><span>1</span><span>, authResponse</span><span>, </span><span>&#8220;Auth=&#8221;</span><span>) + </span><span>4</span><br />
<span> authToken</span><span> = </span><span>Right</span><span>(authResponse</span><span>, </span><span>Len</span><span>(authResponse</span><span>) - authTokenStart</span><span>)</span><br />
<span> getGAauthenticationToken</span><span> = authToken</span><br />
<span> </span><span>Else</span><br />
<span> </span><br />
<span> DTSTaskExecResult_Failure</span><br />
<span> </span><br />
<span> </span><span>End</span><span> </span><span>If</span></p>
<p><span> </span><span>If</span><span> Err.Number</span><span> &lt;&gt; </span><span>0</span><span> </span><span>Then</span><br />
<span> DTSTaskExecResult_Failure</span><br />
<span> </span><span>End</span><span> </span><span>If</span><br />
<span>End</span><span> </span><span>Function</span></p>
<p><span>Function</span><span> LastDayOFPreviousMonth</span><span>(aDate</span><span>) </span><br />
<span> LastDayOFPreviousMonth</span><span> = </span><span>DateAdd</span><span>(</span><span>&#8220;d&#8221;</span><span>, -</span><span>1</span><span>, </span><span>DateSerial</span><span>(</span><span>Year</span><span>(aDate</span><span>), </span><span>Month</span><span>(aDate</span><span>), </span><span>1</span><span>))</span><br />
<span>End</span><span> </span><span>Function</span></p>
<p><span>Function</span><span> FirstDayOFPreviousMonth</span><span>(aDate</span><span>)</span><br />
<span> </span><span>If</span><span> </span><span>Month</span><span>(aDate</span><span>) &gt; </span><span>1</span><span> </span><span>Then</span><br />
<span> FirstDayOFPreviousMonth</span><span> = </span><span>DateSerial</span><span>(</span><span>Year</span><span>(aDate</span><span>), </span><span>Month</span><span>(aDate</span><span>) - </span><span>1</span><span>, </span><span>1</span><span>)</span><br />
<span> </span><span>Else</span><br />
<span> FirstDayOFPreviousMonth</span><span> = </span><span>DateSerial</span><span>(</span><span>Year</span><span>(aDate</span><span>) - </span><span>1</span><span>, </span><span>12</span><span>, </span><span>1</span><span>)</span><br />
<span> </span><span>End</span><span> </span><span>If</span><br />
<span>End</span><span> </span><span>Function</span></p>
<p></span></p>
]]></content:encoded>
			<wfw:commentRss>http://crribs.com/2010/05/google-analytics-api-with-vbscript-retrieving-all-profile-numbers/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Google Analytics Api with VBScript</title>
		<link>http://crribs.com/2010/05/google-analytics-api-with-vbscript/</link>
		<comments>http://crribs.com/2010/05/google-analytics-api-with-vbscript/#comments</comments>
		<pubDate>Wed, 26 May 2010 23:14:01 +0000</pubDate>
		<dc:creator>bshultz</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://crribs.com/?p=92</guid>
		<description><![CDATA[I know its ugly, but it does the job.  Whats that you say?  Youd like to programmatically pull your list of Profile Numbers?  Stay tuned and we&#8217;ll get er done.  What this script does, is it pulls down yesterdays number of visitors for whatever site you entire the &#8220;profilenum&#8221; of for that variable.  Dont forget to [...]]]></description>
			<content:encoded><![CDATA[<p>I know its ugly, but it does the job.  Whats that you say?  Youd like to programmatically pull your list of Profile Numbers?  Stay tuned and we&#8217;ll get er done.  What this script does, is it pulls down yesterdays number of visitors for whatever site you entire the &#8220;profilenum&#8221; of for that variable.  Dont forget to put your email and password in there too.  I know there are some scandanavian or Dutch variables in there.  I borrowed a decent chunk of this code (and changed a whole lot) from Mikael Thunberg&#8217;s VBA flavoring found at:  <a href="http://mikaelspage.blogspot.com/2009/08/excel-functions-for-fetching-data.html">http://mikaelspage.blogspot.com/2009/08/excel-functions-for-fetching-data.html</a></p>
<p>There may be objects that sit unused or variables too.  I had to de-workify the code and was in a hurry.  Also, the previous version spit back all visits because it pulled all your profile numbers.  Because that remains fairly static, I pulled that function out of the code.  I may have left some remnants of it in there, though.</p>
<p><span><span>&#8216;*******************************************************************************</span><br />
<span>&#8216;*</span><br />
<span>&#8216;*  Good Script to pull one time-frames worth of visits from google analytics</span><br />
<span>&#8216;*  for a website with a known profilenum</span><br />
<span>&#8216;*</span><br />
<span>&#8216;*</span><br />
<span>&#8216;*******************************************************************************</span></p>
<p><span>Set</span><span> DataList</span><span> = </span><span>CreateObject</span><span>(</span><span>&#8220;System.Collections.ArrayList&#8221;</span><span>)</span></p>
<p><span>Call</span><span> main</span><span>()</span></p>
<p><span>Sub</span><span> main</span><span>()</span></p>
<p><span> email</span><span> = </span><span>&#8220;emailaddress@gmail.com&#8221;</span><br />
<span> password</span><span> = </span><span>&#8220;password&#8221;</span><br />
<span> profilenum</span><span> = </span><span>&#8220;191919191&#8243;</span><br />
<span> </span><br />
<span> token</span><span> = getGAauthenticationToken</span><span>(email</span><span>, password</span><span>)</span><br />
<span> </span><br />
<span> </span><span>&#8216;arr = getGAdata(token, profilenum, &#8221;visits&#8221;, Date - 7, Date - 1) &#8217;visits for last week</span><br />
<span> arr</span><span> = getGAdata</span><span>(token</span><span>, profilenum</span><span>, </span><span>&#8220;visits&#8221;</span><span>, (</span><span>Date</span><span> &#8211; </span><span>1</span><span>), (</span><span>Date</span><span> &#8211; </span><span>1</span><span>), </span><span>&#8220;&#8221;</span><span>, </span><span>&#8220;&#8221;</span><span>, </span><span>&#8220;&#8221;</span><span>, </span><span>&#8220;&#8221;</span><span>, </span><span>&#8220;&#8221;</span><span>) </span><span>&#8216;visits for previous day</span><br />
<span> </span><br />
<span> WScript.Echo</span><span> arr</span><span>(</span><span>1</span><span>,</span><span>1</span><span>)</span><br />
<span> </span><br />
<span> </span><span>For</span><span> </span><span>Each</span><span> strItem</span><span> </span><span>in</span><span> DataList</span><br />
<span> Wscript.Echo</span><span> strItem</span><br />
<span> </span><span>Next</span><br />
<span> </span><br />
<span> </span><span>If</span><span> Err.Number</span><span> &lt;&gt; </span><span>0</span><span> </span><span>Then</span><span> WScript.Echo</span><span> </span><span>&#8220;ERROR - Main(): &#8221;</span><span> &amp; Err.Description</span><br />
<span>End</span><span> </span><span>Sub</span></p>
<p><span>Function</span><span> getGAauthenticationToken</span><span>(email</span><span>, password</span><span>)</span><br />
<span> </span><span>If</span><span> email</span><span> = </span><span>&#8220;&#8221;</span><span> </span><span>Or</span><span> password</span><span> = </span><span>&#8220;&#8221;</span><span> </span><span>Then</span><br />
<span> getGAauthenticationToken</span><span> = </span><span>&#8220;&#8221;</span><br />
<span> </span><span>Exit</span><span> </span><span>Function</span><br />
<span> </span><span>End</span><span> </span><span>If</span><br />
<span> </span><br />
<span> CurChr</span><span> = </span><span>1</span></p>
<p><span> </span><span>Set</span><span> objhttp</span><span> = </span><span>CreateObject</span><span>(</span><span>&#8220;MSXML2.ServerXMLHTTP&#8221;</span><span>)</span><br />
<span> URL</span><span> = </span><span>&#8220;https://www.google.com/accounts/ClientLogin&#8221;</span><br />
<span> objhttp.Open</span><span> </span><span>&#8220;POST&#8221;</span><span>, URL</span><span>, </span><span>False</span><br />
<span> objhttp.setRequestHeader</span><span> </span><span>&#8220;Content-type&#8221;</span><span>, </span><span>&#8220;application/x-www-form-urlencoded&#8221;</span><br />
<span> objhttp.send</span><span> (</span><span>&#8220;accountType=GOOGLE&amp;Email=&#8221;</span><span> &amp; email</span><span> &amp; </span><span>&#8220;&amp;Passwd=&#8221;</span><span> &amp; password</span><span> &amp; </span><span>&#8220;&amp;service=analytics&amp;Source=CrribsDotCom&#8221;</span><span>)</span></p>
<p><span> authResponse</span><span> = objhttp.responseText</span></p>
<p><span> </span><span>If</span><span> </span><span>InStr</span><span>(</span><span>1</span><span>, authResponse</span><span>, </span><span>&#8220;BadAuthentication&#8221;</span><span>) = </span><span>0</span><span> </span><span>Then</span><br />
<span> authTokenStart</span><span> = </span><span>InStr</span><span>(</span><span>1</span><span>, authResponse</span><span>, </span><span>&#8220;Auth=&#8221;</span><span>) + </span><span>4</span><br />
<span> authToken</span><span> = </span><span>Right</span><span>(authResponse</span><span>, </span><span>Len</span><span>(authResponse</span><span>) - authTokenStart</span><span>)</span><br />
<span> getGAauthenticationToken</span><span> = authToken</span><br />
<span> </span><span>Else</span><br />
<span> </span><br />
<span> WScript.Echo</span><span> </span><span>&#8220;ERROR - getGAauthenticationToken()1: &#8221;</span><span> &amp; Err.Description</span><br />
<span> </span><br />
<span> </span><span>End</span><span> </span><span>If</span></p>
<p><span> </span><span>If</span><span> Err.Number</span><span> &lt;&gt; </span><span>0</span><span> </span><span>Then</span><br />
<span> WScript.Echo</span><span> </span><span>&#8220;ERROR - getGAauthenticationToken()2: &#8221;</span><span> &amp; Err.Description</span><br />
<span> </span><span>End</span><span> </span><span>If</span><br />
<span>End</span><span> </span><span>Function</span></p>
<p><span>Function</span><span> getGAdata</span><span>(authToken</span><span>, profileNumber</span><span>, metrics</span><span>, startDate</span><span>, endDate</span><span>, filters</span><span>, dimensions</span><span>, sort</span><span>, includeHeaders</span><span>, showArraySize</span><span>)</span></p>
<p><span> </span><span>If</span><span> authToken</span><span> = </span><span>&#8220;Authentication failed&#8221;</span><span> </span><span>Then</span><br />
<span> </span><span>ReDim</span><span> TempArray</span><span>(</span><span>1</span><span> ,</span><span>1</span><span>)</span><br />
<span> TempArray</span><span>(</span><span>1</span><span>, </span><span>1</span><span>) = </span><span>&#8220;Authentication failed&#8221;</span><br />
<span> getGAdata</span><span> = TempArray</span><br />
<span> </span><span>Exit</span><span> </span><span>Function</span><br />
<span> </span><span>End</span><span> </span><span>If</span></p>
<p><span> </span><span>If</span><span> authToken</span><span> = </span><span>&#8220;&#8221;</span><span> </span><span>Then</span><br />
<span> </span><span>ReDim</span><span> TempArray</span><span>(</span><span>1</span><span>, </span><span>1</span><span>)</span><br />
<span> TempArray</span><span>(</span><span>1</span><span>, </span><span>1</span><span>) = </span><span>&#8220;Authentication token missing&#8221;</span><br />
<span> getGAdata</span><span> = TempArray</span><br />
<span> </span><span>Exit</span><span> </span><span>Function</span><br />
<span> </span><span>End</span><span> </span><span>If</span></p>
<p><span> </span><span>If</span><span> startDate</span><span> &gt; endDate</span><span> </span><span>Then</span><br />
<span> </span><span>ReDim</span><span> TempArray</span><span>(</span><span>1</span><span>, </span><span>1</span><span>)</span><br />
<span> TempArray</span><span>(</span><span>1</span><span>, </span><span>1</span><span>) = </span><span>&#8220;Start date should be before end date&#8221;</span><br />
<span> getGAdata</span><span> = TempArray</span><br />
<span> </span><span>Exit</span><span> </span><span>Function</span><br />
<span> </span><span>End</span><span> </span><span>If</span></p>
<p><span> startDateString</span><span> = </span><span>Year</span><span>(startDate</span><span>) &amp; </span><span>&#8220;-&#8221;</span><span> &amp; </span><span>Right</span><span>(</span><span>&#8220;0&#8243;</span><span> &amp; </span><span>Month</span><span>(startDate</span><span>), </span><span>2</span><span>) &amp; </span><span>&#8220;-&#8221;</span><span> &amp; </span><span>Right</span><span>(</span><span>&#8220;0&#8243;</span><span> &amp; </span><span>Day</span><span>(startDate</span><span>), </span><span>2</span><span>)</span><br />
<span> endDateString</span><span> = </span><span>Year</span><span>(endDate</span><span>) &amp; </span><span>&#8220;-&#8221;</span><span> &amp; </span><span>Right</span><span>(</span><span>&#8220;0&#8243;</span><span> &amp; </span><span>Month</span><span>(endDate</span><span>), </span><span>2</span><span>) &amp; </span><span>&#8220;-&#8221;</span><span> &amp; </span><span>Right</span><span>(</span><span>&#8220;0&#8243;</span><span> &amp; </span><span>Day</span><span>(endDate</span><span>), </span><span>2</span><span>)</span></p>
<p><span> URL</span><span> = </span><span>&#8220;https://www.google.com/analytics/feeds/data?ids=ga:&#8221;</span><span> &amp; profileNumber</span><span> &amp; </span><span>&#8220;&amp;start-date=&#8221;</span><span> &amp; startDateString</span><span> &amp; </span><span>&#8220;&amp;end-date=&#8221;</span><span> &amp; endDateString</span><span> &amp; </span><span>&#8220;&amp;max-results=10000&#8243;</span><br />
<span> </span><br />
<span> </span><span>If</span><span> metrics</span><span> &lt;&gt; </span><span>&#8220;&#8221;</span><span> </span><span>Then</span><br />
<span> </span><span>If</span><span> </span><span>Left</span><span>(metrics</span><span>, </span><span>3</span><span>) &lt;&gt; </span><span>&#8220;ga:&#8221;</span><span> </span><span>Then</span><span> metrics</span><span> = </span><span>&#8220;ga:&#8221;</span><span> &amp; metrics</span><br />
<span> metrics</span><span> = </span><span>Replace</span><span>(metrics</span><span>, </span><span>&#8220;&amp;&#8221;</span><span>, </span><span>&#8220;&amp;ga:&#8221;</span><span>)</span><br />
<span> metrics</span><span> = </span><span>Replace</span><span>(metrics</span><span>, </span><span>&#8220;&amp;ga:ga:&#8221;</span><span>, </span><span>&#8220;&amp;ga:&#8221;</span><span>)</span></p>
<p><span> tempAns</span><span> = </span><span>&#8220;&#8221;</span></p>
<p><span> CurChr</span><span> = </span><span>1</span></p>
<p><span> metrics</span><span> = </span><span>Replace</span><span>(metrics</span><span>, </span><span>&#8220;ga%00&#8243;</span><span>, </span><span>&#8220;ga:&#8221;</span><span>)</span><br />
<span> metrics</span><span> = </span><span>Replace</span><span>(metrics</span><span>, </span><span>&#8220;%26&#8243;</span><span>, </span><span>&#8220;%2C&#8221;</span><span>)</span></p>
<p><span> URL</span><span> = URL</span><span> &amp; </span><span>&#8220;&amp;metrics=&#8221;</span><span> &amp; metrics</span><br />
<span> </span><span>End</span><span> </span><span>If</span></p>
<p><span> </span><span>If</span><span> filters</span><span> &lt;&gt; </span><span>&#8220;&#8221;</span><span> </span><span>Then</span><br />
<span> </span><span>If</span><span> </span><span>Left</span><span>(filters</span><span>, </span><span>3</span><span>) &lt;&gt; </span><span>&#8220;ga:&#8221;</span><span> </span><span>Then</span><span> filters</span><span> = </span><span>&#8220;ga:&#8221;</span><span> &amp; filters</span><br />
<span> filters</span><span> = </span><span>Replace</span><span>(filters</span><span>, </span><span>&#8220;;&#8221;</span><span>, </span><span>&#8220;;ga:&#8221;</span><span>)</span><br />
<span> filters</span><span> = </span><span>Replace</span><span>(filters</span><span>, </span><span>&#8220;;ga:ga:&#8221;</span><span>, </span><span>&#8220;;ga:&#8221;</span><span>)</span><br />
<span> filters</span><span> = </span><span>Replace</span><span>(filters</span><span>, </span><span>&#8220;,&#8221;</span><span>, </span><span>&#8220;,ga:&#8221;</span><span>)</span><br />
<span> filters</span><span> = </span><span>Replace</span><span>(filters</span><span>, </span><span>&#8220;,ga:ga:&#8221;</span><span>, </span><span>&#8220;,ga:&#8221;</span><span>)</span></p>
<p><span> tempAns</span><span> = </span><span>&#8220;&#8221;</span><br />
<span> CurChr</span><span> = </span><span>1</span></p>
<p><span> </span><span>Do</span><span> </span><span>Until</span><span> CurChr</span><span> &#8211; </span><span>1</span><span> = </span><span>Len</span><span>(filters</span><span>)</span><br />
<span> </span><span>Select</span><span> </span><span>Case</span><span> </span><span>Asc</span><span>(</span><span>Mid</span><span>(filters</span><span>, CurChr</span><span>, </span><span>1</span><span>))</span><br />
<span> </span><span>Case</span><span> </span><span>37</span><span>, </span><span>42</span><span>, </span><span>44</span><span>, </span><span>46</span><span>, </span><span>48</span><span> &gt; </span><span>57</span><span>, </span><span>59</span><span>, </span><span>65</span><span> &gt; </span><span>90</span><span>, </span><span>97</span><span> &gt; </span><span>122</span><span>, </span><span>126</span><br />
<span> tempAns</span><span> = tempAns</span><span> &amp; </span><span>Mid</span><span>(filters</span><span>, CurChr</span><span>, </span><span>1</span><span>)</span><br />
<span> </span><span>Case</span><span> </span><span>32</span><br />
<span> tempAns</span><span> = tempAns</span><span> &amp; </span><span>&#8220;%&#8221;</span><span> &amp; </span><span>Hex</span><span>(</span><span>32</span><span>)</span><br />
<span> </span><span>Case</span><span> </span><span>Else</span><br />
<span> tempAns</span><span> = tempAns</span><span> &amp; </span><span>&#8220;%&#8221;</span><span> &amp; _</span><br />
<span> Format</span><span>(</span><span>Hex</span><span>(</span><span>Asc</span><span>(</span><span>Mid</span><span>(filters</span><span>, _</span><br />
<span> CurChr</span><span>, </span><span>1</span><span>))), </span><span>&#8220;00&#8243;</span><span>)</span><br />
<span> </span><span>End</span><span> </span><span>Select</span></p>
<p><span> CurChr</span><span> = CurChr</span><span> + </span><span>1</span><br />
<span> </span><span>Loop</span></p>
<p><span> filters</span><span> = tempAns</span><br />
<span> filters</span><span> = </span><span>Replace</span><span>(filters</span><span>, </span><span>&#8220;ga%00&#8243;</span><span>, </span><span>&#8220;ga:&#8221;</span><span>)</span><br />
<span> filters</span><span> = </span><span>Replace</span><span>(filters</span><span>, </span><span>&#8220;%26&#8243;</span><span>, </span><span>&#8220;%2C&#8221;</span><span>)</span><br />
<span> URL</span><span> = URL</span><span> &amp; </span><span>&#8220;&amp;filters=&#8221;</span><span> &amp; filters</span><br />
<span> </span><span>End</span><span> </span><span>If</span></p>
<p><span> </span><span>If</span><span> dimensions</span><span> &lt;&gt; </span><span>&#8220;&#8221;</span><span> </span><span>Then</span><br />
<span> </span><span>If</span><span> </span><span>Left</span><span>(dimensions</span><span>, </span><span>3</span><span>) &lt;&gt; </span><span>&#8220;ga:&#8221;</span><span> </span><span>Then</span><span> dimensions</span><span> = </span><span>&#8220;ga:&#8221;</span><span> &amp; dimensions</span><br />
<span> dimensions</span><span> = </span><span>Replace</span><span>(dimensions</span><span>, </span><span>&#8220;&amp;&#8221;</span><span>, </span><span>&#8220;&amp;ga:&#8221;</span><span>)</span><br />
<span> dimensions</span><span> = </span><span>Replace</span><span>(dimensions</span><span>, </span><span>&#8220;&amp;ga:ga:&#8221;</span><span>, </span><span>&#8220;&amp;ga:&#8221;</span><span>)</span><br />
<span> tempAns</span><span> = </span><span>&#8220;&#8221;</span><br />
<span> CurChr</span><span> = </span><span>1</span></p>
<p><span> </span><span>Do</span><span> </span><span>Until</span><span> CurChr</span><span> &#8211; </span><span>1</span><span> = </span><span>Len</span><span>(dimensions</span><span>)</span><br />
<span> </span><span>Select</span><span> </span><span>Case</span><span> </span><span>Asc</span><span>(</span><span>Mid</span><span>(dimensions</span><span>, CurChr</span><span>, </span><span>1</span><span>))</span><br />
<span> </span><span>Case</span><span> </span><span>37</span><span>, </span><span>48</span><span> &gt; </span><span>57</span><span>, </span><span>65</span><span> &gt; </span><span>90</span><span>, </span><span>97</span><span> &gt; </span><span>122</span><br />
<span> tempAns</span><span> = tempAns</span><span> &amp; </span><span>Mid</span><span>(dimensions</span><span>, CurChr</span><span>, </span><span>1</span><span>)</span><br />
<span> </span><span>Case</span><span> </span><span>32</span><br />
<span> tempAns</span><span> = tempAns</span><span> &amp; </span><span>&#8220;%&#8221;</span><span> &amp; </span><span>Hex</span><span>(</span><span>32</span><span>)</span><br />
<span> </span><span>Case</span><span> </span><span>Else</span><br />
<span> tempAns</span><span> = tempAns</span><span> &amp; </span><span>&#8220;%&#8221;</span><span> &amp; _</span><br />
<span> Format</span><span>(</span><span>Hex</span><span>(</span><span>Asc</span><span>(</span><span>Mid</span><span>(dimensions</span><span>, _</span><br />
<span> CurChr</span><span>, </span><span>1</span><span>))), </span><span>&#8220;00&#8243;</span><span>)</span><br />
<span> </span><span>End</span><span> </span><span>Select</span><br />
<span> CurChr</span><span> = CurChr</span><span> + </span><span>1</span><br />
<span> </span><span>Loop</span></p>
<p><span> dimensions</span><span> = tempAns</span><br />
<span> dimensions</span><span> = </span><span>Replace</span><span>(dimensions</span><span>, </span><span>&#8220;ga%00&#8243;</span><span>, </span><span>&#8220;ga:&#8221;</span><span>)</span><br />
<span> dimensions</span><span> = </span><span>Replace</span><span>(dimensions</span><span>, </span><span>&#8220;%26&#8243;</span><span>, </span><span>&#8220;%2C&#8221;</span><span>)</span><br />
<span> URL</span><span> = URL</span><span> &amp; </span><span>&#8220;&amp;dimensions=&#8221;</span><span> &amp; dimensions</span><br />
<span> </span><span>End</span><span> </span><span>If</span></p>
<p><span> </span><span>If</span><span> sort</span><span> = </span><span>True</span><span> </span><span>Then</span><span> URL</span><span> = URL</span><span> &amp; </span><span>&#8220;&amp;sort=-&#8221;</span><span> &amp; metrics</span></p>
<p><span> </span><span>Set</span><span> objhttp</span><span> = </span><span>CreateObject</span><span>(</span><span>&#8220;MSXML2.ServerXMLHTTP&#8221;</span><span>)</span></p>
<p><span> objhttp.Open</span><span> </span><span>&#8220;GET&#8221;</span><span>, URL</span><span>, </span><span>False</span><br />
<span> objhttp.setRequestHeader</span><span> </span><span>&#8220;Content-type&#8221;</span><span>, </span><span>&#8220;application/x-www-form-urlencoded&#8221;</span><br />
<span> objhttp.setRequestHeader</span><span> </span><span>&#8220;Authorization&#8221;</span><span>, </span><span>&#8220;GoogleLogin Auth=&#8221;</span><span> &amp; authToken</span><br />
<span> objhttp.send</span><span> (</span><span>&#8220;&#8221;</span><span>)</span></p>
<p><span> gaResponse</span><span> = objhttp.responseText</span></p>
<p><span> </span><span>If</span><span> </span><span>InStr</span><span>(</span><span>1</span><span>, gaResponse</span><span>, </span><span>&#8220;Token invalid&#8221;</span><span>) &gt; </span><span>0</span><span> </span><span>Or</span><span> </span><span>InStr</span><span>(</span><span>1</span><span>, gaResponse</span><span>, </span><span>&#8220;Authorization required&#8221;</span><span>) &gt; </span><span>0</span><span> </span><span>Then</span><br />
<span> </span><span>ReDim</span><span> TempArray</span><span>(</span><span>1</span><span>, </span><span>1</span><span>)</span><br />
<span> TempArray</span><span>(</span><span>1</span><span>, </span><span>1</span><span>) = </span><span>&#8220;Authentication failed&#8221;</span><br />
<span> getGAdata</span><span> = TempArray</span><br />
<span> </span><span>Exit</span><span> </span><span>Function</span><br />
<span> </span><span>End</span><span> </span><span>If</span></p>
<p><span> </span><span>Set</span><span> XMLdoc</span><span> = </span><span>CreateObject</span><span>(</span><span>&#8220;MSXML2.DOMDocument&#8221;</span><span>)</span><br />
<span> </span><br />
<span> XMLdoc.LoadXML</span><span> (objhttp.responseText</span><span>)</span></p>
<p><span> </span><span>Set</span><span> juuri</span><span> = XMLdoc.DocumentElement</span><br />
<span> </span><span>Set</span><span> lapset</span><span> = juuri.ChildNodes</span></p>
<p><span> </span><span>For</span><span> </span><span>Each</span><span> lapsi</span><span> </span><span>In</span><span> lapset</span><br />
<span> </span><span>If</span><span> lapsi.nodeName</span><span> = </span><span>&#8220;openSearch:totalResults&#8221;</span><span> </span><span>Then</span><br />
<span> varRows</span><span> = </span><span>CDbl</span><span>(lapsi.Text</span><span>)</span><br />
<span> </span><span>End</span><span> </span><span>If</span></p>
<p><span> </span><span>If</span><span> lapsi.nodeName</span><span> = </span><span>&#8220;entry&#8221;</span><span> </span><span>Then</span><br />
<span> </span><span>Set</span><span> lapset2</span><span> = lapsi.ChildNodes</span><br />
<span> </span><span>For</span><span> </span><span>Each</span><span> lapsi2</span><span> </span><span>In</span><span> lapset2</span><br />
<span> </span><span>If</span><span> lapsi2.nodeName</span><span> = </span><span>&#8220;dxp:dimension&#8221;</span><span> </span><span>Or</span><span> lapsi2.nodeName</span><span> = </span><span>&#8220;dxp:metric&#8221;</span><span> </span><span>Then</span><br />
<span> varColumns</span><span> = varColumns</span><span> + </span><span>1</span><br />
<span> </span><span>End</span><span> </span><span>If</span><br />
<span> </span><span>Next</span><br />
<span> </span><span>End</span><span> </span><span>If</span><br />
<span> </span><span>Next</span><br />
<span> </span><br />
<span> </span><span>If</span><span> varRows</span><span> &gt; </span><span>10000</span><span> </span><span>Then</span><span> varRows</span><span> = </span><span>10000</span></p>
<p><span> </span><span>If</span><span> varRows</span><span> = </span><span>0</span><span> </span><span>And</span><span> varColumns</span><span> = </span><span>0</span><span> </span><span>Then</span><br />
<span> </span><span>ReDim</span><span> TempArray</span><span>(</span><span>1</span><span>, </span><span>1</span><span>)</span><br />
<span> TempArray</span><span>(</span><span>1</span><span>, </span><span>1</span><span>) = </span><span>&#8220;No data found&#8221;</span><br />
<span> getGAdata</span><span> = TempArray</span><br />
<span> </span><span>Exit</span><span> </span><span>Function</span><br />
<span> </span><span>End</span><span> </span><span>If</span></p>
<p><span> </span><span>ReDim</span><span> TempArray</span><span>(varRows</span><span>, varColumns</span><span>)</span><br />
<span> </span><span>If</span><span> includeHeaders</span><span> = </span><span>True</span><span> </span><span>Then</span><span> </span><span>ReDim</span><span> TempArray</span><span>(varRows</span><span>, varColumns</span><span>)</span></p>
<p><span> </span><span>If</span><span> showArraySize</span><span> = </span><span>True</span><span> </span><span>Then</span><br />
<span> </span><span>ReDim</span><span> TempArray</span><span>(</span><span>1</span><span>, </span><span>1</span><span>)</span><br />
<span> TempArray</span><span>(</span><span>1</span><span>, </span><span>1</span><span>) = varColumns</span><span> &amp; </span><span>&#8220; columns * &#8221;</span><span> &amp; varRows</span><span> &amp; </span><span>&#8220; rows&#8221;</span><br />
<span> </span><span>If</span><span> includeHeaders</span><span> = </span><span>True</span><span> </span><span>Then</span><span> TempArray</span><span>(</span><span>1</span><span>, </span><span>1</span><span>) = TempArray</span><span>(</span><span>1</span><span>, </span><span>1</span><span>) &amp; </span><span>&#8220; + header row&#8221;</span><br />
<span> getGAdata</span><span> = TempArray</span><br />
<span> </span><span>Exit</span><span> </span><span>Function</span><br />
<span> </span><span>End</span><span> </span><span>If</span><br />
<span> </span><br />
<span> varrow</span><span> = </span><span>1</span></p>
<p><span> </span><span>For</span><span> </span><span>Each</span><span> lapsi</span><span> </span><span>In</span><span> lapset</span><br />
<span> </span><span>If</span><span> lapsi.nodeName</span><span> = </span><span>&#8220;entry&#8221;</span><span> </span><span>Then</span><br />
<span> varcol</span><span> = </span><span>1</span></p>
<p><span> </span><span>Set</span><span> lapset2</span><span> = lapsi.ChildNodes</span><br />
<span> </span><span>For</span><span> </span><span>Each</span><span> lapsi2</span><span> </span><span>In</span><span> lapset2</span><br />
<span> </span><span>If</span><span> lapsi2.nodeName</span><span> = </span><span>&#8220;dxp:dimension&#8221;</span><span> </span><span>Then</span><br />
<span> </span><span>Set</span><span> attribuutit</span><span> = lapsi2.Attributes</span><br />
<span> TempArray</span><span>(varrow</span><span>, varcol</span><span>) = </span><span>Left</span><span>(attribuutit.getNamedItem</span><span>(</span><span>&#8220;value&#8221;</span><span>).Text</span><span>, </span><span>255</span><span>)</span><br />
<span> </span><span>If</span><span> varrow</span><span> = </span><span>1</span><span> </span><span>And</span><span> includeHeaders</span><span> = </span><span>True</span><span> </span><span>Then</span><span> TempArray</span><span>(</span><span>0</span><span>, varcol</span><span>) = attribuutit.getNamedItem</span><span>(</span><span>&#8220;name&#8221;</span><span>).Text</span><br />
<span> varcol</span><span> = varcol</span><span> + </span><span>1</span><br />
<span> </span><span>End</span><span> </span><span>If</span></p>
<p><span> </span><span>If</span><span> lapsi2.nodeName</span><span> = </span><span>&#8220;dxp:metric&#8221;</span><span> </span><span>Then</span><br />
<span> </span><span>Set</span><span> attribuutit</span><span> = lapsi2.Attributes</span><br />
<span> </span><span>If</span><span> </span><span>Not</span><span> </span><span>IsNumeric</span><span>(attribuutit.getNamedItem</span><span>(</span><span>&#8220;value&#8221;</span><span>).Text</span><span>) </span><span>Then</span><br />
<span> TempArray</span><span>(varrow</span><span>, varcol</span><span>) = </span><span>CDbl</span><span>(</span><span>Replace</span><span>(attribuutit.getNamedItem</span><span>(</span><span>&#8220;value&#8221;</span><span>).Text</span><span>, </span><span>&#8220;.&#8221;</span><span>, </span><span>&#8220;,&#8221;</span><span>))</span><br />
<span> </span><span>Else</span><br />
<span> TempArray</span><span>(varrow</span><span>, varcol</span><span>) = </span><span>CDbl</span><span>(attribuutit.getNamedItem</span><span>(</span><span>&#8220;value&#8221;</span><span>).Text</span><span>)</span><br />
<span> </span><span>End</span><span> </span><span>If</span></p>
<p><span> </span><span>If</span><span> varrow</span><span> = </span><span>1</span><span> </span><span>And</span><span> includeHeaders</span><span> = </span><span>True</span><span> </span><span>Then</span><span> TempArray</span><span>(</span><span>0</span><span>, varcol</span><span>) = attribuutit.getNamedItem</span><span>(</span><span>&#8220;name&#8221;</span><span>).Text</span><br />
<span> varcol</span><span> = varcol</span><span> + </span><span>1</span><br />
<span> </span><span>End</span><span> </span><span>If</span><br />
<span> </span><span>Next</span><br />
<span> varrow</span><span> = varrow</span><span> + </span><span>1</span><br />
<span> </span><span>End</span><span> </span><span>If</span><br />
<span> </span><span>Next</span></p>
<p><span> getGAdata</span><span> = TempArray</span></p>
<p><span> </span><span>If</span><span> Err.Number</span><span> &lt;&gt; </span><span>0</span><span> </span><span>Then</span><br />
<span> WScript.Echo</span><span> </span><span>&#8220;ERROR - getGAdata(): &#8221;</span><span> &amp; Err.Description</span><br />
<span> </span><span>End</span><span> </span><span>If</span><br />
<span>End</span><span> </span><span>Function</span><br />
</span></p>
]]></content:encoded>
			<wfw:commentRss>http://crribs.com/2010/05/google-analytics-api-with-vbscript/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Get Number of Pages Indexed by Google with Vbscript</title>
		<link>http://crribs.com/2010/05/get-number-of-pages-indexed-by-google-with-vbscript/</link>
		<comments>http://crribs.com/2010/05/get-number-of-pages-indexed-by-google-with-vbscript/#comments</comments>
		<pubDate>Wed, 05 May 2010 07:45:44 +0000</pubDate>
		<dc:creator>bshultz</dc:creator>
				<category><![CDATA[Google related]]></category>
		<category><![CDATA[analytics]]></category>
		<category><![CDATA[tools and utilities]]></category>
		<category><![CDATA[vbscript]]></category>
		<category><![CDATA[helpful vbscript]]></category>
		<category><![CDATA[usable vbscript. google analytics vbscript]]></category>

		<guid isPermaLink="false">http://crribs.com/?p=86</guid>
		<description><![CDATA[Have you ever needed to track the number of pages indexed daily for a site within Google? To save you some time, the following vbscript will grab the number of estimated pages Google returns as a single integer, the same as if you entered: site:crribs.com into the &#8216;Search&#8217; box. The returned page gives you back [...]]]></description>
			<content:encoded><![CDATA[<p>Have you ever needed to track the number of pages indexed daily for a site within Google?  To save you some time, the following vbscript will grab the number of estimated pages Google returns as a single integer, the same as if you entered: site:crribs.com into the &#8216;Search&#8217; box.  The returned page gives you back &#8211; for example &#8211;  Results 1 &#8211; 10 of about 171 from crribs.com. (0.19 seconds) .  This script would return the number 171, for analytical/statistical tracking purposes.  Make sure to enter the correct cannonical version of your site for the variable if youve specified one in Google Webmaster Tools.</p>
<p><code>varSite = "crribs.com"</code></p>
<p><code> </code></p>
<p><code>WScript.Echo getGoogIndexedPages(varSite)</code></p>
<p><code>Function getGoogIndexedPages(strUrl)</p>
<p>strUrl = "http://www.google.com/search?hl=en&amp;source=hp&amp;q=site:" &amp; strUrl &amp; "&amp;aq=f&amp;aqi=&amp;aql=&amp;oq=&amp;gs_rfai="</p>
<p>Set xmlhttp = createobject("msxml2.xmlhttp.3.0")</p>
<p>xmlhttp.open "get", strUrl, false</p>
<p>xmlhttp.send</p>
<p>Set objRegEx = CreateObject("VBScript.RegExp")</p>
<p>objRegEx.Global = True</p>
<p>objRegEx.Pattern = "of about \[\d|\,]*\&lt;\/b\&gt;"  (Google updated the format of this page.  Replace the RegEx and itll work again.)</p>
<p><strong>objRegEx.Pattern = "About.\d+.\d+"</strong></p>
<p>strSearchString = xmlhttp.responseText</p>
<p>Set colMatches = objRegEx.Execute(strSearchString)</p>
<p>If colMatches.count &gt; 0 Then</p>
<p>For Each match In colMatches</p>
<p>strMatch = match</p>
<p>Next</p>
<p>End If</p>
<p>strMatch = Replace(strMatch, "of about <strong>", "")</strong></p>
<p><strong> </strong><strong> strMatch = Replace(strMatch, "</strong>", "")</p>
<p>getGoogIndexedPages = strMatch</p>
<p></code></p>
<p><code>End Function</code></p>
]]></content:encoded>
			<wfw:commentRss>http://crribs.com/2010/05/get-number-of-pages-indexed-by-google-with-vbscript/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Send Twitter Update with VBScript</title>
		<link>http://crribs.com/2010/03/send-twitter-update-with-vbscript/</link>
		<comments>http://crribs.com/2010/03/send-twitter-update-with-vbscript/#comments</comments>
		<pubDate>Mon, 01 Mar 2010 21:16:16 +0000</pubDate>
		<dc:creator>bshultz</dc:creator>
				<category><![CDATA[Enterprise Wide Script Logging]]></category>
		<category><![CDATA[Scheduled Task Management]]></category>
		<category><![CDATA[Twitter]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[free resources]]></category>
		<category><![CDATA[tools and utilities]]></category>
		<category><![CDATA[unique concepts]]></category>
		<category><![CDATA[vbscript]]></category>
		<category><![CDATA[.vbs and twitter]]></category>
		<category><![CDATA[Enterprise Wide Syslog]]></category>
		<category><![CDATA[Scheduled Tasks]]></category>
		<category><![CDATA[Scripts]]></category>
		<category><![CDATA[Twitter Automation]]></category>
		<category><![CDATA[vbs]]></category>

		<guid isPermaLink="false">http://crribs.com/?p=78</guid>
		<description><![CDATA[I was thinking of using Twitter as a kind of &#8216;syslog&#8217; for all of the scripts we have running (via the task scheduler) all over the enterprise. There is no centralized logging implemented. Ive made some attempts via text files, sql server, the event log, etc., but nothing has taken hold as &#8211; easy to [...]]]></description>
			<content:encoded><![CDATA[<p>I was thinking of using Twitter as a kind of &#8216;syslog&#8217; for all of the scripts we have running (via the task scheduler) all over the enterprise.  There is no centralized logging implemented.  Ive made some attempts via text files, sql server, the event log, etc., but nothing has taken hold as &#8211; easy to implement, universal, and straightforward.  This is the visual basic script I came up with to upload the messages.</p>
<pre lang="Visual Basic"></pre>
<p><code><br />
'**************************************************************************<br />
'*  Scriptname: PostToTwitterSimple.vbs<br />
'*    TWITTER STATUS UPDATE<br />
'*    Brad Shultz  - crribs.com<br />
'**************************************************************************<br />
strUsername = "username" 'Username<br />
strPassword = "password" 'Password<br />
strMessage = "This is a test twitter update from a vbscript." 'Message for twitter</p>
<p>strTwitterXMLResponse = SendToTwitter(strMessage, strUsername, strPassword) </p>
<p>'postback what you sent to twitter<br />
MsgBox strTwitterXMLResponse, VbOkOnly, "TWITTER STATUS UPDATE" </p>
<p>Function SendToTwitter(strMessage, strUsername, strPassword)<br />
     Set objHTTP = CreateObject("Microsoft.XMLHTTP")<br />
          objHTTP.open "POST", "http://twitter.com/statuses/update.xml", false, strUsername, strPassword<br />
          objHTTP.send "status=" &#038; strMessage<br />
          SendToTwitter = objHTTP.responseText<br />
     Set objHTTP = nothing<br />
End Function</code></p>
]]></content:encoded>
			<wfw:commentRss>http://crribs.com/2010/03/send-twitter-update-with-vbscript/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Red Gate SQL Prompt Freeware &#8211; Intellisense for SQL Server Tools</title>
		<link>http://crribs.com/2010/03/73/</link>
		<comments>http://crribs.com/2010/03/73/#comments</comments>
		<pubDate>Mon, 01 Mar 2010 20:53:31 +0000</pubDate>
		<dc:creator>bshultz</dc:creator>
				<category><![CDATA[Apps You Can't Find Anymore]]></category>
		<category><![CDATA[Great Apps]]></category>
		<category><![CDATA[SQL Server Tools]]></category>
		<category><![CDATA[free resources]]></category>
		<category><![CDATA[tools and utilities]]></category>
		<category><![CDATA[last free version-ware]]></category>
		<category><![CDATA[SQL Server code-completion]]></category>
		<category><![CDATA[Sql Server intellisense]]></category>

		<guid isPermaLink="false">http://crribs.com/?p=73</guid>
		<description><![CDATA[In the spirit of sharing, and noticing that Red Gate Software&#8217;s SQL Prompt is up to $295 dollars for a single license, I&#8217;d like to offer this freeware/beta that Red Gate released to the public right after it acquired the SQL Prompt software from a company (who was giving it away for free).  This application [...]]]></description>
			<content:encoded><![CDATA[<p>In the spirit of sharing, and noticing that Red Gate Software&#8217;s SQL Prompt is up to $295 dollars for a single license, I&#8217;d like to offer this freeware/beta that Red Gate released to the public right after it acquired the SQL Prompt software from a company (who was giving it away for free).  This application brings intellisense/code completion to Sql Server- Management Studio, Query Analyzer, Editpad (I think), etc.  They realized that they were going to have to make substantial changes to the codebase in order to optimize it to their standards; so in the meantime, the current version of SQL Prompt was offered up for free.  I havent been able to find this anywhere else, so- here it is:  the original freeware version of Red Gate Software&#8217;s SQL Prompt.  Its a beta type version, but works very well as far as I&#8217;ve used it.  It requires no license because it was released as freeware.  Download it here.</p>
<div id="attachment_74" class="wp-caption alignleft" style="width: 110px"><a href="http://crribs.com/wp-content/uploads/2010/03/sqlprompt.gif"><img class="size-full wp-image-74" title="sqlprompt" src="http://crribs.com/wp-content/uploads/2010/03/sqlprompt.gif" alt="red gate software's sql prompt" width="100" height="114" /></a><p class="wp-caption-text">Red Gate Software&#39;s SQL Prompt - the freeware edition; Intellisense for SQL Server!!!</p></div>
<p><a title="http://www.mediafire.com/file/ejnazzdwtwi/SQLPromptSetup.msi" href="http://www.mediafire.com/file/ejnazzdwtwi/SQLPromptSetup.msi" target="_blank">http://www.mediafire.com/file/ejnazzdwtwi/SQLPromptSetup.msi</a></p>
]]></content:encoded>
			<wfw:commentRss>http://crribs.com/2010/03/73/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Cool Asp Help Desk (Freeware)</title>
		<link>http://crribs.com/2010/02/cool-asp-help-desk-freeware/</link>
		<comments>http://crribs.com/2010/02/cool-asp-help-desk-freeware/#comments</comments>
		<pubDate>Wed, 03 Feb 2010 20:08:31 +0000</pubDate>
		<dc:creator>bshultz</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Free Asp HelpDesk software]]></category>
		<category><![CDATA[Free Asp Site]]></category>
		<category><![CDATA[Liberum Help Desk]]></category>

		<guid isPermaLink="false">http://crribs.com/2010/02/cool-asp-help-desk-freeware/</guid>
		<description><![CDATA[http://www.liberum.org/content/features.aspx Is a neat free .asp help-desk solution. It could be customized pretty easily to an organization&#8217;s specific needs. I&#8217;ve found that help-desk software can be expensive and over-complicated for our sometimes very basic needs.]]></description>
			<content:encoded><![CDATA[<p>http://www.liberum.org/content/features.aspx</p>
<p>Is a neat free .asp help-desk solution.  It could be customized pretty easily to an organization&#8217;s specific needs.  I&#8217;ve found that help-desk software can be expensive and over-complicated for our sometimes very basic needs.</p>
]]></content:encoded>
			<wfw:commentRss>http://crribs.com/2010/02/cool-asp-help-desk-freeware/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Microsoft Text Driver Taps out at 255 Columns</title>
		<link>http://crribs.com/2010/02/microsoft-text-driver-taps-out-at-255-columns/</link>
		<comments>http://crribs.com/2010/02/microsoft-text-driver-taps-out-at-255-columns/#comments</comments>
		<pubDate>Wed, 03 Feb 2010 20:03:49 +0000</pubDate>
		<dc:creator>bshultz</dc:creator>
				<category><![CDATA[Text file processing]]></category>
		<category><![CDATA[csv file component]]></category>
		<category><![CDATA[odbc text driver]]></category>
		<category><![CDATA[powershell csv]]></category>
		<category><![CDATA[schema.ini]]></category>

		<guid isPermaLink="false">http://crribs.com/?p=18</guid>
		<description><![CDATA[At work, a main component of my job involves daily maintenance of 200 or so scheduled vbscript&#8217;s that maintain servers, generate daily data feeds, process images, transfer files, and do the bulk of our ETL processing (retrieval, normalization, etc.).  Because many of the imports consist of relational files that we need to combine into one, [...]]]></description>
			<content:encoded><![CDATA[<p>At work, a main component of my job involves daily maintenance of 200 or so scheduled vbscript&#8217;s that maintain servers, generate daily data feeds, process images, transfer files, and do the bulk of our ETL processing (retrieval, normalization, etc.).  Because many of the imports consist of relational files that we need to combine into one, file- an internal schema we use in an attempt to standardize loading into the db- we use the Microsoft text driver to query the text files (with the text driver, you can query delimited text files with a subset of SQL, so you can join multiple files together and aggregate relational data).</p>
<p>The text driver requires a file named &#8220;schema.ini&#8221; to be placed within the directory holding the files you want to query.  As you guessed, the schema.ini specifies the schema of the file.  You set values like character set, if the first row has headers or not, and the length/type of the headers.  But you are SOL if you have a .csv file with more than 255 columns.  I haven&#8217;t found any really good solutions yet (actually, I&#8217;ve used some pretty terrible ones).  I have actually resorted to firing off a DTS package in the middle of a script that trims off unneeded columns and outputs a new file, with less than 255 columns.  Short of looping through the whole .csv, splitting every line by the delimiter, and reassembling a new file based on the resulting array, I can&#8217;t even really think of any good solutions.  One promising lead is the free component for working with .csv files from Chilkat (<a href="http://www.example-code.com/vbscript/csv_read.asp">http://www.example-code.com/vbscript/csv_read.asp</a> &#8211; it can be downloaded for free on this page- the download link is the little peach-colored down arrow icon about two inches from the top of the page).</p>
<p>I&#8217;m thinking, though, that it may be time to ditch vbscript in favor of Powershell, which has an &#8216;import-csv&#8217; commandlet.  It takes a .csv file in memory, and creates an object for every header item.  It works really well, in my limited testing.</p>
]]></content:encoded>
			<wfw:commentRss>http://crribs.com/2010/02/microsoft-text-driver-taps-out-at-255-columns/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Visual Basic Control Creation Edition &#8211; VB5_CCE.zip</title>
		<link>http://crribs.com/2010/01/visual-basic-control-creation-edition-vb5_ccezip/</link>
		<comments>http://crribs.com/2010/01/visual-basic-control-creation-edition-vb5_ccezip/#comments</comments>
		<pubDate>Thu, 28 Jan 2010 22:52:40 +0000</pubDate>
		<dc:creator>bshultz</dc:creator>
				<category><![CDATA[ActiveX]]></category>
		<category><![CDATA[Apps You Can't Find Anymore]]></category>
		<category><![CDATA[Classic Visual Basic]]></category>
		<category><![CDATA[ActiveX Controls]]></category>
		<category><![CDATA[VB5 IDE]]></category>
		<category><![CDATA[VB5_CCE.exe]]></category>
		<category><![CDATA[VB5_CCE.zip]]></category>
		<category><![CDATA[Visual Basic 5 Control Creation Edition]]></category>

		<guid isPermaLink="false">http://crribs.com/?p=69</guid>
		<description><![CDATA[Sometimes useful apps disappear from the web.  I was looking for this guy recently, and finally tracked down the installer on an old hard drive I have.  This application was offered as a freebie by Microsoft.  It&#8217;s basically the &#8216;Express&#8217; version of VB5, intended to be used solely for creating ActiveX controls.  Its a great [...]]]></description>
			<content:encoded><![CDATA[<p>Sometimes useful apps disappear from the web.  I was looking for this guy recently, and finally tracked down the installer on an old hard drive I have.  This application was offered as a freebie by Microsoft.  It&#8217;s basically the &#8216;Express&#8217; version of VB5, intended to be used solely for creating ActiveX controls.  Its a great lightweight IDE if you find yourself needing to edit some pre-.net vb code, or, in fact, creating an ActiveX control.  Couldn&#8217;t find the sucker anywhere, so thought I would be charitable and make it available.  Cheers.</p>
<p><a href="http://www.mediafire.com/?3zwy2onzwdw">http://www.mediafire.com/?3zwy2onzwdw</a></p>
]]></content:encoded>
			<wfw:commentRss>http://crribs.com/2010/01/visual-basic-control-creation-edition-vb5_ccezip/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
