challenge LL Golf Hole 1 - tinyurl.comを使ってURLを短縮する

tinyurl.com( http://tinyurl.com/ )のサービスを利用し、 http://ll.jus.or.jp/2008/info/xgihyo というURLを短縮しなさい。tinyurl.comのalias機能は使わないものとする。 なお、参考までに短縮したURLは http://tinyurl.com/5mngx8 となる。

余力のあるものはこのプログラムを短くしてみたり、短くしてみたり、短くしてみよ。

※LL Future実行委員の高野光弘です。この出題は LL Future公式の出題であり、優れたものについてはLL Golfのセッションでご紹介させていただくかもしれません。ご理解の上、ご投稿ください。また、LL Futureのチケットは現在も発売中です。よろしければ、メインイベントの方にもぜひご参加ください。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
#!/usr/bin/env ruby

require 'rubygems'
require 'mechanize'

def tinyurl(url, _alias = nil)
    m = WWW::Mechanize.new
    res = m.get('http://tinyurl.com/')
    form = res.forms[1]
    form['url'] = url
    form['alias'] = _alias if _alias
    res = m.submit(form)
    regexp = Regexp.new('.*(http\:\//tinyurl.com/[a-z0-9-]+).*')
    match = regexp.match(res.body)
    return match[1] if match
end

if __FILE__ == $0 then
    puts tinyurl('http://ll.jus.or.jp/2008/info/xgihyo')
end

Posted feedbacks - Java

HttpURLConnectionを用いてサンプルのRubyプログラムをできるだけ忠実にJavaに変換しました。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
import java.net.*;
import java.io.*;
import java.util.regex.*;

public class TinyURL {
    public static final String SAMPLE_URL = "http://ll.jus.or.jp/2008/info/xgihyo";
    private static final Pattern TINYURL_PAT = Pattern.compile("http://tinyurl\\.com/[a-z0-9-]+");
    private static final String CONVURL = "http://tinyurl.com/create.php";

    public static String tinyURL(String url, String alias) throws IOException {
        URL tinyUrl = new URL(CONVURL);
        HttpURLConnection uc = (HttpURLConnection) tinyUrl.openConnection();
        String query = "url=" + URLEncoder.encode(url, "UTF-8");
        if (alias != null)
            query += "&alias=" + URLEncoder.encode(alias, "UTF-8");
        byte[] ba = query.getBytes("us-ascii");
        uc.setRequestMethod("POST");
        uc.setDoOutput(true);
        uc.setFixedLengthStreamingMode(ba.length);
        uc.connect();
        try {
            OutputStream os = uc.getOutputStream();
            os.write(ba);
            BufferedReader r = new BufferedReader(new InputStreamReader(uc.getInputStream(), "iso-8859-1"));
            String line;
            while ((line = r.readLine()) != null) {
                Matcher m = TINYURL_PAT.matcher(line);
                if (m.find()) {
                    return m.group();
                }
            }
            return null;
        } finally {
            uc.disconnect();
        }
    }
    
    public static String tinyURL(String url) throws IOException {
        return tinyURL(url, null);
    }

    public static void main(String[] args) throws IOException {
        System.out.println(tinyURL(SAMPLE_URL));
    }
}

Index

Feed

Other

Link

Pathtraq

loading...