【Java】URL을 입력하면 그 페이지가 사용하고 있는 WordPress의 테마명을 표시하는 프로그램을 만들어 보았다

소개



28세 업계 미경험, 프로그래밍소의 사람입니다.

Qiita 첫 투고! !

현재 Java의 연수를 받고 있으므로 배운 것의 비망록으로서,
그리고 같은 프로그래밍 초보자 분들의 도움에 조금이라도 세우면(자) Qiita에 투고하기로 했습니다.

보기 흉한 점 많이 있을까 생각합니다만, 따뜻한 눈으로 봐 주세요.

이 기사에 대하여



web페이지 보고 있으면 「이 사이트 wordpress 사용하고 있는 것일까?」 「무슨 테마 사용하고 있는 거야?」라고 생각하는 것이 상당히 있으므로, 공부가 나면 나름대로 Java로 써 보았습니다.
명령에서 실행하는 브라우저에서 URL을 복사하여 실행하면 결과가 표시되는 간단한 사람입니다.

방법을 생각하다



HTML 소스 코드의 내에 wp-content라는 문자열이 포함되어 있는지 WordPress를 사용하고 있는지 확인합니다.
테마명은 wp-content/themes/의 뒤에 쓰여져 있으므로, 소스 코드내의 제일 처음에 나오는 wp-content/themes/의 부분을 취득하면 알 것 같습니다.

html 취득 → List에 대입 → for문으로 한 줄씩 체크

라는 흐름으로 해 보았습니다.

샘플 코드



Sample.java
import java.io.*;
import java.net.URL;
import java.net.URLConnection;
import java.util.ArrayList;
import java.util.List;

public class Sample {
    private List<String> contents;
    private final String CHARSET = "UTF-8";

    public static void main(String[] args) {
        String inputUrl = "";
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        Sample sample = new Sample();

        try {
            inputUrl = reader.readLine();
            sample.addContents(inputUrl);
            sample.checkWordpress();
        } catch (IOException e) {
            System.out.println(e);
        }
    }

    // 指定したページがWordpressを使っているか確かめるメソッド
    public void checkWordpress() {
        boolean WpCheck = false;

        for (String content : getContents()) {
            // headタグ内に "wp-content/themes/" が含まれているかで判定
            if (content.contains("wp-content/themes/") == true) {
                int idx = content.indexOf("wp-content/themes/");
                String line = content.substring(idx + 18); // "wp-content/themes/"以降の文字列
                idx = line.indexOf("/"); // テーマ名直後の "/" のインデックス番号
                System.out.println("\nテーマ名 : " + line.substring(0, idx)); // テーマ名を出力
                WpCheck = true;
                break;
            }
        }
        if (WpCheck == true) {
            System.out.println("Wordpressを使っています。\n");
        } else {
            System.out.println("\nWordpressは使われていません。");
        }
    }

    // 指定されたURLのソースコードを取得するメソッド
    public List<String> download(String url, String charset) throws Exception {

        URLConnection conn = new URL(url).openConnection();
        InputStream is = conn.getInputStream();

        try (BufferedReader reader = new BufferedReader(new InputStreamReader(is, charset))) {
            ArrayList<String> lineList = new ArrayList<String>();
            String line = null;
            while ((line = reader.readLine()) != null) {
                lineList.add(line);
            }
            return lineList;
        }
    }

    // ダウンロードしたソースコードをListに代入するメソッド
    public void addContents(String url) {
        try {
            this.contents = download(url, getCharset());
        } catch (Exception e) {
            e.printStackTrace();
            System.out.println("無効なURLです。");
            System.exit(0);
        }
    }

    public List<String> getContents() {
        return this.contents;
    }
    public String getCharset() {
        return this.CHARSET;
    }
}

【실행 결과】


시험에 'lightning'의 공식 페이지 URL을 지정했습니다.
테마 이름을 얻을 수 있었습니다.

해설



표준 입력에서 URL을 지정하여 http 통신으로 얻은 html 소스 코드를 List에 할당합니다.
checkWordpress 메서드에서 List에 할당된 html 소스 코드를 한 줄씩 for 문으로 확인합니다.
if문에서 "wp-content/themes/"가 소스 코드에 포함되어 있는지 판정.
"wp-content/themes/"의 인덱스 번호를 취득.
테마명을 취득하고 싶기 때문에, "wp-content/themes/"의 문자수(18문자)를 더한 인덱스 번호 이후의 문자열을 취득.
테마명 직후의 "/"의 인덱스 번호를 취득해, 0번째부터 "/"까지의 캐릭터 라인을 빼내면 테마명을 알 수 있습니다.

마지막으로



더 효율적인 방법이 있다고 생각하지만, 지금 자신에게는 이것이 가득했습니다.
애초에 브라우저에서 페이지의 소스를 표시하자마자 알겠지만, 공부를 위해 해 보았습니다.
자신이 원하는 기능을 만드는 것은, 즐겁고 달성감 있는 엄청 조사하기 때문에 공부가 됩니다.

좋은 웹페이지 즐겨찾기