Excel VBA +、465 332バイト
注:参照を使用して
- Microsoft HTMLオブジェクトライブラリ
- Microsoftインターネットコントロール
- Microsoft Scripting Runtime
ゴルフ済み:
予想されるタイプの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
の初期化子を削除しj
、k
クリーンモジュールを想定する場合は-8バイト
-1バイトに変更google.com
するgoogle.nl
交換用-3バイトDim i as New ...
とSet i=New ...
SHDocVw.
クラス参照を削除するための-8バイト
with i
ブロックを削除するための-12バイト
-7バイトの削除i.quit
-インターネットエクスプローラーをバックグラウンドで開いたままにしておくと、メモリリークが発生します。代わりに、完全な未ゴルフバージョンを使用するか、使用後にインターネットエクスプローラータスクをタスクマネージャーで終了することをお勧めします
i.navigate
ヘルパーサブルーチンに移動するための-6バイトh
Do Until ... Loop
ヘルパーサブルーチンに移動するための-13バイト
-2バイト、j=0
ヘルパーに移動して削除,j
、,0
(x2)
匿名イミディエイトウィンドウ関数に変換する場合は-11バイト
for .. next
ループへのヘルパー関数呼び出しを減らすための-8バイト
出力変化のために-16バイトSheets(1)
を介して表示する画像オブジェクトをInternetExplorer
オブジェクト
Ungolfed、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