Excel VBA + , 465 332 바이트
참고 : 참조를 사용하여
- Microsoft HTML 객체 라이브러리
- Microsoft 인터넷 컨트롤
- Microsoft 스크립팅 런타임
골프 :
예상 유형의 Sub
입력 n
(이름의 약자)을 가져와 Variant/String
해당 이름의 쿼리에 대한 첫 번째 Google 이미지 검색 결과를 glamour shot
인터넷 탐색기 창에 출력하는 전체 루틴 .
Sub g(n)
Set i=New InternetExplorer
l="google.nl/search?tbm=isch&q="&Replace(n," ","+")&"+glamour+shot"
For y=0To 2
i.navigate l
While i.readyState<4
DoEvents
Wend
j=0
Do Until InStr(1,l,IIf(y,"yp","res"))
j=j+1
Set x=i.document.getElementsByTagName(IIf(y,"img","a"))(j)
If y Then l=x.src Else l=x.href
Loop
Next
i.visible=1
End Sub
공백을 제거하기위한 -2 바이트 If InStr(1, a.href, "imgres") Then
로 변경 .navigate (a.href)
하기 위한 -2 바이트.navigate a.href
for each a in ... if (...) then ... end if .. next
루프를 줄이기위한 -27 바이트do until ... loop
응축 -10 바이트 imgres
에 res
와 encrypted
에yp
-11위한 initalizers 제거 바이트 j
, k
깨끗한 모듈 가정
로 변경 google.com
하기 위한 -1 바이트google.nl
바이트 -3 대체 Dim i as New ...
하여Set i=New ...
SHDocVw.
클래스 참조 를 제거하기위한 -8 바이트
with i
블록 제거를위한 -12 바이트
제거를위한 -7 바이트 i.quit
-인터넷 익스플로러를 백그라운드에서 열어두면 메모리 누수가 발생합니다. 따라서 전체 ungolfed 버전을 대신 사용하거나 사용 후 작업 관리자를 통해 인터넷 익스플로러 작업을 종료하는 것이 좋습니다.
i.navigate
헬퍼 서브 루틴으로 이동하기위한 -6 바이트h
Do Until ... Loop
헬퍼 서브 루틴으로 이동하기위한 -13 바이트
j=0
도우미 로 이동 하여 ,j
, ,0
(x2)를 제거하여 -2 바이트
익명의 즉시 창 함수로 변환하기위한 -11 바이트
for .. next
루프 로의 헬퍼 함수 호출을 줄이기위한 -8 바이트
출력 변화 -16 바이트 Sheets(1)
비아 표시하는 화상 오브젝트를 InternetExplorer
오브젝트
언 골프, 1304 바이트
Option Private Module
Option Compare Text
Option Explicit
Option Base 0
Sub GlamourShot(ByVal name As String)
Dim ie As New SHDocVw.InternetExplorer, _
doc As MSHTML.HTMLDocument, _
link As String, _
j As Integer, _
k As Integer
With ie
On Error GoTo CloseIE #'prevents memory leak
Let .visible = True
Call .navigate("www.google.com/search?tbm=isch&q=" & _
Replace(name, " ", "+") & _
"+glamour+shot")
While .readyState <> READYSTATE_COMPLETE Or .Busy
VBA.DoEvents
Wend
Set doc = .document
Let j = 1
Do Until InStr(1, link, "imgres") > 0
Let link = doc.getElementsByTagName("a")(j).href
Let j = j + 1
Loop
Call .navigate(link)
While .readyState <> READYSTATE_COMPLETE Or .Busy
VBA.DoEvents
Wend
Let k = 1
Do Until InStr(1, link, "encrypted") > 0
Let link = doc.getElementsByTagName("img")(k).src
Let k = k + 1
Loop
With ThisWorkbook.ActiveSheet
Call .Range("A1").Select
Call .Pictures.Insert(link)
Call .Activate
End With
CloseIE:
Call .Quit
End With
End Sub
사용법 gif