PROGRAMMING/AUTOHOTKEY

[오토핫키] 웹 파싱을 해보자 - ReadUrl.ahk

ReadUrl.ahk.

아주 간단한 문장으로 웹 페이지의 HTML 데이터들를 긁어 올 수 있게 해주는 코드입니다. 

ReadURL.ahk
0.00MB

 

Include.

소스코드 상단에 다음과 같은 코드를 작성하여 코드를 Include를 할 수 있습니다.

단, 아래와 같이 코드를 기입할 경우에는 ReadUrl.ahk 파일이 Script 파일과 같이 있어야 합니다.

#include ReadUrl.ahk

 

사용.

웹 페이지의 데이터를 저장하는 방법은 아주 단순합니다. 단 한줄만 적어주면 됩니다.

data := ReadUrl("YOUR_URL")

 

예제.

웹 페이지의 데이터 전체를 긁어와 MsgBox로 출력하는 예제 입니다.

#Include ReadUrl.ahk

data := ReadUrl("http://go-guma.com/tistory/ReadUrlText.html")
Msgbox, % data

다음과 같은 결과를 출력하게 됩니다.

Source Code.

ReadURL(URL, encoding = "utf-8") {
	static a := "AutoHotkey/" A_AhkVersion
	if (!DllCall("LoadLibrary", "str", "wininet") || !(h := DllCall("wininet\InternetOpen", "str", a, "uint", 1, "ptr", 0, "ptr", 0, "uint", 0, "ptr")))
		return 0
	c := s := 0, o := ""
	if (f := DllCall("wininet\InternetOpenUrl", "ptr", h, "str", url, "ptr", 0, "uint", 0, "uint", 0x80003000, "ptr", 0, "ptr"))
	{
		while (DllCall("wininet\InternetQueryDataAvailable", "ptr", f, "uint*", s, "uint", 0, "ptr", 0) && s > 0)
		{
			VarSetCapacity(b, s, 0)
			DllCall("wininet\InternetReadFile", "ptr", f, "ptr", &b, "uint", s, "uint*", r)
			o .= StrGet(&b, r >> (encoding = "utf-16" || encoding = "cp1200"), encoding)
		}
		DllCall("wininet\InternetCloseHandle", "ptr", f)
	}
	DllCall("wininet\InternetCloseHandle", "ptr", h)
	return o
}