CreateFlickrImageLinks

  • /*
     * @title CreateFlickrImageLinks
     * @description Flickr に保存した画像をブログに貼り付けるためのタグを生成
     * @license MIT License
     * @require 
     */
    
    (function() {
        var textArea = document.createElement("textarea");
        textArea.setAttribute("cols", 100);
        textArea.setAttribute("rows", 20); 
        document.getElementsByTagName("body")[0].appendChild(textArea);
    
        function createOriginalImageLinks(doc) {
            var list = doc.getElementsByTagName("img");
            for (var i = 0; i < list.length; i++) {
                var img = list[i];
                var href = img.getAttribute("src");
                var m = href.match(/(^.+static\.flickr\.com.+\/)([0-9]+)_[0-9a-f]{10}_?.?\.jpg/);
                if (m && m[2]) {
                    var imgId = m[2];
                    href = 'http://www.flickr.com/photo_zoom.gne?id=' + imgId + '&size=o';
                    lookup(href, createOnLookup(imgId, img));
                }
            }
        }
    
        function createRequest() {
            if (window.XMLHttpRequest) {
                return new XMLHttpRequest();
            } else if (window.ActiveXObject) {
                try {
                    return new ActiveXObject("Msxml2.XMLHTTP");
                } catch(ex) {
                    return new ActiveXObject("Microsoft.XMLHTTP");
                }
            } else {
                return null;
            }
        }
    
        function createOnLookup(startUrl, img){
            return function parseResult(res) {
                var re = new RegExp('<img src="([^"]+' + startUrl + '.+\.jpg)"');
                var m = res.responseText.match(re);
                if (m) {
                    var a = '<a href="http://www.flickr.com/photos/username/' + startUrl + '/"><img src="' + m[1] + '"></a>';
                    textArea.value = textArea.value + a + "\n";
                }
            }
        }
    
        function lookup(url, onLookup){
            var req = createRequest();
            //req.setRequestHeader('Referer', 'http://www.flickr.com/photos/');
            req.onreadystatechange = function(){
                if (req.readyState == 4 && req.status == 200){
                    onLookup(req);
                }
            }
            req.open('GET', url, true);
            req.send(null);
        }
    
        createOriginalImageLinks(document);
    })();
  • Permalink
    このページへの個別リンクです。
    RAW
    書かれたコードへの直接のリンクです。
    Packed
    文字列が圧縮された書かれたコードへのリンクです。
    Userscript
    Greasemonkey 等で利用する場合の .user.js へのリンクです。
    Loader
    @require やソースコードが長い場合に多段ロードする Loader コミのコードへのリンクです。
    Metadata
    コード中にコメントで @xxx と書かれたメタデータの JSON です。

History

  1. 2010/07/08 03:50:18 - 2010-07-08
  2. 2010/06/09 22:04:00 - 2010-06-09
  3. 2010/06/09 22:03:37 - 2010-06-09
  4. 2010/06/08 21:12:14 - 2010-06-08
  5. 2010/06/08 16:23:06 - 2010-06-08