<?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>Mashup Guide &#187; chickenfoot</title>
	<atom:link href="http://blog.mashupguide.net/category/chickenfoot/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.mashupguide.net</link>
	<description>A blog about Raymond Yee&#039;s Book Pro Web 2.0 Mashups: Remixing Data and Web Services</description>
	<lastBuildDate>Wed, 23 Feb 2011 13:35:50 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
<image>
  <link>http://blog.mashupguide.net</link>
  <url>http://blog.mashupguide.net/favicon.ico</url>
  <title>Mashup Guide</title>
</image>
		<item>
		<title>S3Ajax:  creating buckets and uploading keys</title>
		<link>http://blog.mashupguide.net/2008/12/17/s3ajax-creating-buckets-and-uploading-keys/</link>
		<comments>http://blog.mashupguide.net/2008/12/17/s3ajax-creating-buckets-and-uploading-keys/#comments</comments>
		<pubDate>Wed, 17 Dec 2008 16:50:34 +0000</pubDate>
		<dc:creator>raymond.yee</dc:creator>
				<category><![CDATA[AJAX]]></category>
		<category><![CDATA[Amazon S3]]></category>
		<category><![CDATA[chickenfoot]]></category>
		<category><![CDATA[javascript]]></category>

		<guid isPermaLink="false">http://blog.mashupguide.net/?p=126</guid>
		<description><![CDATA[	
	<span class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Adc&amp;rfr_id=info%3Asid%2Focoins.info%3Agenerator&amp;rft.title=S3Ajax%3A++creating+buckets+and+uploading+keys&amp;rft.aulast=Yee&amp;rft.aufirst=Raymond&amp;rft.subject=AJAX&amp;rft.subject=Amazon+S3&amp;rft.subject=chickenfoot&amp;rft.subject=javascript&amp;rft.source=Mashup+Guide&amp;rft.date=2008-12-17&amp;rft.type=blogPost&amp;rft.format=text&amp;rft.identifier=http://blog.mashupguide.net/2008/12/17/s3ajax-creating-buckets-and-uploading-keys/&amp;rft.language=English"></span>
Continuing on Mashup Guide :: listing keys with S3Ajax, here I present a Chickenfoot script to create a bucket and upload a file (specifically, it creates a bucket by the name of raymondyeetest and uploads a file (D:\Document\PersonalInfoRemixBook\examples\ch16\Exported Items.rdf from my WinXP machine) to the key exportitems.rdf in the bucket: include("D:\\document\\JavaScriptLib\\sha1.js"); include("D:\\document\\JavaScriptLib\\S3Ajax.js"); var AWSAccessKeyId = [...]]]></description>
			<content:encoded><![CDATA[	
	<span class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Adc&amp;rfr_id=info%3Asid%2Focoins.info%3Agenerator&amp;rft.title=S3Ajax%3A++creating+buckets+and+uploading+keys&amp;rft.aulast=Yee&amp;rft.aufirst=Raymond&amp;rft.subject=AJAX&amp;rft.subject=Amazon+S3&amp;rft.subject=chickenfoot&amp;rft.subject=javascript&amp;rft.source=Mashup+Guide&amp;rft.date=2008-12-17&amp;rft.type=blogPost&amp;rft.format=text&amp;rft.identifier=http://blog.mashupguide.net/2008/12/17/s3ajax-creating-buckets-and-uploading-keys/&amp;rft.language=English"></span>
<p>Continuing on <a href="http://blog.mashupguide.net/2008/12/17/listing-keys-with-s3ajax/">Mashup Guide :: listing keys with S3Ajax</a>,  here I present a Chickenfoot script to create a bucket and upload a file (specifically, it creates a bucket by the name of <code>raymondyeetest</code> and uploads a file (<code>D:\Document\PersonalInfoRemixBook\examples\ch16\Exported Items.rdf</code> from my WinXP machine) to the key <code>exportitems.rdf</code> in the bucket:</p>
<pre id="pre">include(<span style="color: green;">"D:\\document\\JavaScriptLib\\sha1.js"</span>);
include(<span style="color: green;">"D:\\document\\JavaScriptLib\\S3Ajax.js"</span>);

<span style="color: purple;">var</span> AWSAccessKeyId = <span style="color: green;">"</span>[AWSAccessKeyId<span style="color: green;">]"</span>;
<span style="color: purple;">var</span> AWSSecretAccessKey = <span style="color: green;">"[</span>AWSSecretAccessKey]<span style="color: green;">"</span>;

S3Ajax.URL = <span style="color: green;">'http://s3.amazonaws.com'</span>;
S3Ajax.DEBUG = <span style="color: purple;">true</span>;
S3Ajax.KEY_ID = AWSAccessKeyId;
S3Ajax.SECRET_KEY = AWSSecretAccessKey;

<span style="color: blue;">// function to read contents from a file</span>

<span style="color: purple;">function</span> read_file_contents(aFileURL) {
  <span style="color: blue;">// https://developer.mozilla.org/en/Code_snippets/File_I%2f%2fO#Binary_File</span>

  <span style="color: purple;">var</span> ios = Components.classes[<span style="color: green;">"@mozilla.org/network/io-service;1"</span>]
                      .getService(Components.interfaces.nsIIOService);
  <span style="color: purple;">var</span> url = ios.newURI(aFileURL, <span style="color: purple;">null</span>, <span style="color: purple;">null</span>);

  <span style="color: purple;">if</span> (!url || !url.schemeIs(<span style="color: green;">"file"</span>)) <span style="color: purple;">throw</span> <span style="color: green;">"Expected a file URL."</span>;
  <span style="color: purple;">var</span> bFile = url.QueryInterface(Components.interfaces.nsIFileURL).file;
  <span style="color: purple;">var</span> istream = Components.classes[<span style="color: green;">"@mozilla.org/network/file-input-stream;1"</span>]
                          .createInstance(Components.interfaces.nsIFileInputStream);
  istream.init(bFile, -1, -1, <span style="color: purple;">false</span>);
  <span style="color: purple;">var</span> bstream = Components.classes[<span style="color: green;">"@mozilla.org/binaryinputstream;1"</span>]
                          .createInstance(Components.interfaces.nsIBinaryInputStream);
  bstream.setInputStream(istream);
  <span style="color: purple;">var</span> bytes = bstream.readBytes(bstream.available());
  <span style="color: purple;">return</span> bytes;

}

<span style="color: blue;">// create a bucket</span>

<span style="color: purple;">var</span> newBucketName = <span style="color: green;">'raymondyeetest'</span>;

S3Ajax.createBucket(newBucketName, <span style="color: purple;">function</span>() {
    output(<span style="color: green;">"created a buicket: "</span> + newBucketName);
    s3_list();
}, <span style="color: purple;">function</span> () {
      output (<span style="color: green;">"error in createBucket"</span>);
   }
);

<span style="color: blue;">// add a key to a bucket</span>

<span style="color: purple;">var</span> fileURL = <span style="color: green;">'file:///D:/Document/PersonalInfoRemixBook/examples/ch16/Exported%20Items.rdf'</span>
<span style="color: purple;">var</span> content = read_file_contents(fileURL);
alert(content);

S3Ajax.put(newBucketName , <span style="color: green;">"exportitems.rdf"</span>, content,
    {
       content_type: <span style="color: green;">"application/xml; charset=UTF-8"</span>,
       meta:  {<span style="color: green;">'creator'</span>:<span style="color: green;">'Raymond Yee'</span>},
       acl:    <span style="color: green;">"public-read"</span>,
    },
    <span style="color: purple;">function</span>(req) {
        output(<span style="color: green;">"Upload succeeded"</span>);
    },
    <span style="color: purple;">function</span>(req, obj) {
        output(<span style="color: green;">"Upload failed"</span>);
    }
);</pre>
<p>A few things to note about this code:</p>
<ul>
<li> <code>read_file_contents()</code> doesn't strike me as a terribly elegant way of reading contents from a file -- but that's what I have working for now</li>
<li>a tricky part of getting this to work was to note that in FF 3.x,  charset=UTF-8 is automatically tacked on to content-type HTTP request header in a xmlhttprequest -- I don't know how to change the charset or whether you can -- and why UTF-8 is being tacked on.  But figuring out the charset was crucial to getting this working since the content-type HTTP header is used in the calculation of the Amazon S3 signature.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.mashupguide.net/2008/12/17/s3ajax-creating-buckets-and-uploading-keys/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>listing keys with S3Ajax</title>
		<link>http://blog.mashupguide.net/2008/12/17/listing-keys-with-s3ajax/</link>
		<comments>http://blog.mashupguide.net/2008/12/17/listing-keys-with-s3ajax/#comments</comments>
		<pubDate>Wed, 17 Dec 2008 16:03:48 +0000</pubDate>
		<dc:creator>raymond.yee</dc:creator>
				<category><![CDATA[Amazon S3]]></category>
		<category><![CDATA[chickenfoot]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[S3Ajax]]></category>

		<guid isPermaLink="false">http://blog.mashupguide.net/?p=124</guid>
		<description><![CDATA[	
	<span class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Adc&amp;rfr_id=info%3Asid%2Focoins.info%3Agenerator&amp;rft.title=listing+keys+with+S3Ajax&amp;rft.aulast=Yee&amp;rft.aufirst=Raymond&amp;rft.subject=Amazon+S3&amp;rft.subject=chickenfoot&amp;rft.subject=javascript&amp;rft.source=Mashup+Guide&amp;rft.date=2008-12-17&amp;rft.type=blogPost&amp;rft.format=text&amp;rft.identifier=http://blog.mashupguide.net/2008/12/17/listing-keys-with-s3ajax/&amp;rft.language=English"></span>
In a previous post (learning how to use S3Ajax to access Amazon S3), I show how to use Chickenfoot and S3Ajax to list S3 buckets. Here is a slight elaboration of the code to list the keys within buckets (in addition to the buckets): include("D:\\document\\JavaScriptLib\\sha1.js"); include("D:\\document\\JavaScriptLib\\S3Ajax.js"); var AWSAccessKeyId = "[AWSAccessKeyId]"; var AWSSecretAccessKey = "[AWSSecretAccessKey]"; S3Ajax.DEBUG [...]]]></description>
			<content:encoded><![CDATA[	
	<span class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Adc&amp;rfr_id=info%3Asid%2Focoins.info%3Agenerator&amp;rft.title=listing+keys+with+S3Ajax&amp;rft.aulast=Yee&amp;rft.aufirst=Raymond&amp;rft.subject=Amazon+S3&amp;rft.subject=chickenfoot&amp;rft.subject=javascript&amp;rft.source=Mashup+Guide&amp;rft.date=2008-12-17&amp;rft.type=blogPost&amp;rft.format=text&amp;rft.identifier=http://blog.mashupguide.net/2008/12/17/listing-keys-with-s3ajax/&amp;rft.language=English"></span>
<p>In a previous post (<a href="http://blog.mashupguide.net/2008/11/25/learning-how-to-use-s3ajax-to-access-amazon-s3/">learning how to use S3Ajax to access Amazon S3</a>), I show how to use <a href="http://groups.csail.mit.edu/uid/chickenfoot/">Chickenfoot</a> and <a href="http://www.decafbad.com/hgwebdir.cgi/S3Ajax">S3Ajax</a> to list S3 buckets.  Here is a slight elaboration of the code to list the keys within buckets (in addition to the buckets):</p>
<pre id="pre">include(<span style="color: green;">"D:\\document\\JavaScriptLib\\sha1.js"</span>);
include(<span style="color: green;">"D:\\document\\JavaScriptLib\\S3Ajax.js"</span>);

<span style="color: purple;">var</span> AWSAccessKeyId = <span style="color: green;">"[</span>AWSAccessKeyId]<span style="color: green;">"</span>;
<span style="color: purple;">var</span> AWSSecretAccessKey = <span style="color: green;">"[</span>AWSSecretAccessKey]<span style="color: green;">"</span>;

S3Ajax.DEBUG = <span style="color: purple;">true</span>;
S3Ajax.KEY_ID = AWSAccessKeyId;
S3Ajax.SECRET_KEY = AWSSecretAccessKey;

<span style="color: purple;">function</span> s3_listKeys(bucket) {
  S3Ajax.listKeys(bucket,<span style="color: purple;">null</span>,
    <span style="color: purple;">function</span>(req, obj) {
        <span style="color: purple;">var</span> contents = obj.ListBucketResult.Contents;
        <span style="color: purple;">for</span> (<span style="color: purple;">var</span> i=0, item; item=contents[i]; i++) {
           output(<span style="color: green;">"key: "</span> + bucket + <span style="color: green;">": "</span> + item.Key +
            <span style="color: green;">" ["</span> + item.LastModified + <span style="color: green;">'] '</span> +
             <span style="color: green;">" ("</span> + item.Size + <span style="color: green;">")"</span>);
        }
    },
     <span style="color: purple;">function</span>(req,obj) {
        output(<span style="color: green;">"s3_listKeys failed at "</span> + (<span style="color: purple;">new</span> Date()));
     }
  )
} <span style="color: blue;">// s3_listKeys</span>

S3Ajax.listBuckets(
    <span style="color: purple;">function</span>(req, obj) {
        <span style="color: purple;">if</span> (obj.ListAllMyBucketsResult) {
            <span style="color: purple;">var</span> buckets = obj.ListAllMyBucketsResult.Buckets.Bucket;
            <span style="color: purple;">for</span> (<span style="color: purple;">var</span> i=0, bucket; bucket=buckets[i]; i++) {
              output (
                    <span style="color: green;">"bucket: "</span> + bucket.Name + <span style="color: green;">' ['</span>+
                      bucket.CreationDate+<span style="color: green;">']'</span>
              );
              s3_listKeys(bucket.Name);
            }
        }
    },
    <span style="color: purple;">function</span>(req) {
        output (<span style="color: green;">"Buckets list failed at "</span>+(<span style="color: purple;">new</span> Date()));
    }
);</pre>
]]></content:encoded>
			<wfw:commentRss>http://blog.mashupguide.net/2008/12/17/listing-keys-with-s3ajax/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>learning how to use S3Ajax to access Amazon S3</title>
		<link>http://blog.mashupguide.net/2008/11/25/learning-how-to-use-s3ajax-to-access-amazon-s3/</link>
		<comments>http://blog.mashupguide.net/2008/11/25/learning-how-to-use-s3ajax-to-access-amazon-s3/#comments</comments>
		<pubDate>Tue, 25 Nov 2008 18:48:38 +0000</pubDate>
		<dc:creator>raymond.yee</dc:creator>
				<category><![CDATA[AJAX]]></category>
		<category><![CDATA[Amazon S3]]></category>
		<category><![CDATA[chickenfoot]]></category>

		<guid isPermaLink="false">http://blog.mashupguide.net/?p=120</guid>
		<description><![CDATA[	
	<span class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Adc&amp;rfr_id=info%3Asid%2Focoins.info%3Agenerator&amp;rft.title=learning+how+to+use+S3Ajax+to+access+Amazon+S3&amp;rft.aulast=Yee&amp;rft.aufirst=Raymond&amp;rft.subject=AJAX&amp;rft.subject=Amazon+S3&amp;rft.subject=chickenfoot&amp;rft.source=Mashup+Guide&amp;rft.date=2008-11-25&amp;rft.type=blogPost&amp;rft.format=text&amp;rft.identifier=http://blog.mashupguide.net/2008/11/25/learning-how-to-use-s3ajax-to-access-amazon-s3/&amp;rft.language=English"></span>
In a previous post ( Amazon S3 signature calculation in JavaScript), I show how to calculate using JavaScript a "signature" need to access Amazon S3. In this post, I show a code snippet for using Leslie Michael Orchard's S3Ajax, which I'm evaluating for using to connect Zotero with Amazon S3. (Like the code from my previous [...]]]></description>
			<content:encoded><![CDATA[	
	<span class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Adc&amp;rfr_id=info%3Asid%2Focoins.info%3Agenerator&amp;rft.title=learning+how+to+use+S3Ajax+to+access+Amazon+S3&amp;rft.aulast=Yee&amp;rft.aufirst=Raymond&amp;rft.subject=AJAX&amp;rft.subject=Amazon+S3&amp;rft.subject=chickenfoot&amp;rft.source=Mashup+Guide&amp;rft.date=2008-11-25&amp;rft.type=blogPost&amp;rft.format=text&amp;rft.identifier=http://blog.mashupguide.net/2008/11/25/learning-how-to-use-s3ajax-to-access-amazon-s3/&amp;rft.language=English"></span>
<p>In a previous post (<a href="http://blog.mashupguide.net/2008/11/25/amazon-s3-signature-calculation-in-javascript/"> Amazon S3 signature calculation in JavaScript</a>), I show how to calculate using JavaScript a "signature" need to access Amazon S3.  In this post, I show a code snippet for using <a href="http://decafbad.com/blog/lifestream">Leslie Michael Orchard</a>'s <a href="http://www.decafbad.com/hgwebdir.cgi/S3Ajax">S3Ajax</a>, which I'm evaluating for using to connect Zotero with Amazon S3.   (Like the code from my previous calculation, it too depends on the <a href="http://pajhome.org.uk/crypt/md5/sha1src.html">sha1.js library</a>.).  Here's a Chickenfoot script (which is a slight rewriting of a L. M. Orchard's <a href="http://www.decafbad.com/hgwebdir.cgi/S3Ajax/file/7006d3de0ce0/js/play.js#l125">listbuckets function in play.js</a>) to list your S3 buckets (you need to substitute the appropriate key/secret and download <a href="http://www.decafbad.com/hgwebdir.cgi/S3Ajax/file/7006d3de0ce0/js/S3Ajax.js">S3Ajax.js</a> and sha1.js and substitute the correct path for these libraries):</p>
<pre id="pre">include("<span style="color: green;">D:\\document\\JavaScriptLib\\sha1.js"</span>);
include("D:\\document\\JavaScriptLib\\S3Ajax.js");

<span style="color: purple;">var</span> AWSAccessKeyId = <span style="color: green;">"[</span>AWSAccessKeyId]<span style="color: green;">"</span>;
<span style="color: purple;">var</span> AWSSecretAccessKey = <span style="color: green;">"</span>[AWSSecretAccessKey<span style="color: green;">]"</span>;

S3Ajax.DEBUG = true;
S3Ajax.KEY_ID = AWSAccessKeyId;
S3Ajax.SECRET_KEY = AWSSecretAccessKey;

S3Ajax.listBuckets(
    function(req, obj) {
        if (obj.ListAllMyBucketsResult) {
            var buckets = obj.ListAllMyBucketsResult.Buckets.Bucket;
            for (var i=0, bucket; bucket=buckets[i]; i++) {
                output (
                    bucket.Name + ' ['+bucket.CreationDate+']'
                );
            }
        }
    },
    function(req) {
        output ("Buckets list failed at "+(new Date()));
    }
);</pre>
<p>I will have to try some more sophisticated actions -- but the simple listing of buckets worked for me.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.mashupguide.net/2008/11/25/learning-how-to-use-s3ajax-to-access-amazon-s3/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

