001package org.jsoup.examples;
002
003import org.jsoup.Jsoup;
004import org.jsoup.helper.Validate;
005import org.jsoup.nodes.Document;
006import org.jsoup.nodes.Element;
007import org.jsoup.select.Elements;
008
009import java.io.IOException;
010
011/**
012 * Example program to list links from a URL.
013 */
014public class ListLinks {
015    public static void main(String[] args) throws IOException {
016        Validate.isTrue(args.length == 1, "usage: supply url to fetch");
017        String url = args[0];
018        print("Fetching %s...", url);
019
020        Document doc = Jsoup.connect(url).get();
021        Elements links = doc.select("a[href]");
022        Elements media = doc.select("[src]");
023        Elements imports = doc.select("link[href]");
024
025        print("\nMedia: (%d)", media.size());
026        for (Element src : media) {
027            if (src.tagName().equals("img"))
028                print(" * %s: <%s> %sx%s (%s)",
029                        src.tagName(), src.attr("abs:src"), src.attr("width"), src.attr("height"),
030                        trim(src.attr("alt"), 20));
031            else
032                print(" * %s: <%s>", src.tagName(), src.attr("abs:src"));
033        }
034
035        print("\nImports: (%d)", imports.size());
036        for (Element link : imports) {
037            print(" * %s <%s> (%s)", link.tagName(),link.attr("abs:href"), link.attr("rel"));
038        }
039
040        print("\nLinks: (%d)", links.size());
041        for (Element link : links) {
042            print(" * a: <%s>  (%s)", link.attr("abs:href"), trim(link.text(), 35));
043        }
044    }
045
046    private static void print(String msg, Object... args) {
047        System.out.println(String.format(msg, args));
048    }
049
050    private static String trim(String s, int width) {
051        if (s.length() > width)
052            return s.substring(0, width-1) + ".";
053        else
054            return s;
055    }
056}