멋진 글래머 샷


11

여기에 이미지 설명을 입력하십시오

오늘 웹에서이 사진을 찾았습니다. 게으른 프로그래머이기 때문에 실제로 Google을 열고 두 문자를 입력하고 싶지 않습니다. 너무 많은 일! 이것은 자동화되어야 할 중요한 작업입니다.

도전

Google 검색 결과 의 첫 번째 이미지 가 항상 최고 라는 것을 누구나 알고 있습니다. 따라서 사용자에게 제시해야합니다.

문자열을 매개 변수로 사용하고 해당 이름을 검색 할 때 Google에서 찾은 첫 번째 이미지 + 그 glamour shot뒤에 단어를 표시하는 프로그램 또는 함수를 작성 해야합니다.

Google 검색어

구글에서 이미지를 검색하려면, URL은 쿼리 매개 변수를 포함해야 tbm=ischq=query함께, query검색 할 이름 인.
내 이름에 대한 유효한 쿼리 문자열이 Bas될 것이다www.google.com/search?tbm=isch&q=Bas

입력

프로그램 또는 함수는 단일 입력 매개 변수를 사용하며 이는 Google에서 검색하려는 이름입니다. 이 문자열은 문자로 구성됩니다 [a-z], [A-Z], [0-9](공간). 이 문자열은 공백으로 구분되어 Google에서 공백으로 구분 된 문자열을 검색하려면 공백을로 바꿔야합니다 +. 예를 들어 다음은 유효한 검색어입니다.
www.google.com/search?tbm=isch&q=Bassdrop+Cumberwubwubwub+glamour+shot

산출

이미지를 화면에 그리거나 파일 (모든 형식)로 저장할 수 있습니다.
Google의 첫 번째 검색 결과가 gif 파일 인 경우 gif를 표시하거나 해당 gif의 모든 프레임을 표시 할 수 있습니다.

테스트 사례

이 스 니펫을 실행하여 예상 결과를 확인하십시오.

이것은 바이트 단위의 , 가장 짧은 코드입니다.


입력시 어떤 문자를 지원해야합니까? URL 인코딩에 대해 걱정해야합니까?
Martin Ender

@Martin Ender [a-z0-9], 내 게시물을 편집했습니다. URL은 내가 제공 한 예제처럼 보일 것이며, 인코딩이 필요없고, 단지 다음과 같은 공간 +
일뿐입니다.

나는 추측 A-Z당신의 예에 의해 판단 나타날 수 있습니까?
Martin Ender

@MartinEnder 예, 대소 문자를 구분하지 않습니다. 언급을 잊어 버렸습니다
Bassdrop Cumberwubwubwub

2
이 게임을 할 때 총을 가진 포즈 사람들의 놀라운 숫자가있다 : D는
베타 붕괴

답변:


8

PowerShell v4 +, 160 바이트

param($a)iwr (((iwr "google.com/search?tbm=isch&q=$($a-replace' ','+')+glamour+shot").links|?{$_.innerhtml-like"*$a*"})[0].innerhtml-split'"')[3] -outf "$a.jpg"

입력 $a을 문자열로받습니다. 않는 Invoke-WebRequest( iwr행 내부 문자열 스크립트 블록 구글 사용하여 적절한 위치에) -replace와 공백 +입력 문자열이다. 우리는 받아 .links(가) 어디 그를 .innerhtml이다 -like우리의 입력 문자열. 적절한 섬네일 설명이 포함 된 링크가 생성됩니다. 처음 받아 [0]그 중 하나를 가지고 .innerhtml-split는 인용에. 네 번째 [3]요소는 img src="부분 내부의 텍스트 이므로 로컬 폴더에 ile을 iwr지정하여 다른 부분을 수행 합니다. 이들은 Google에서 생성 한 미리보기 이미지이므로 jpg 여야합니다.-outf$a.jpg


1
당신은 밖으로 변경할 수 있습니다 google.comgoogle.nl대한 -1 바이트
테일러 스콧에게

4

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 바이트 imgresresencryptedyp

-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

사용법 Gif


3

진동기 , 30 번의 키 입력

pgi<End> glamour shot<CR>fi222jf<CR>fim2

고해상도 이미지가 필요하지 않은 경우 27 번의 키 입력 :

pgi<End> glamour shot<CR>fi222j;I<CR>

비디오 : https://youtu.be/t8824UjlYt8



다행히 Firefox의 표준 검색 엔진은 Google이며 Vimperator를 사용하면 기본적으로 힌트를 입력 할 수 있습니다. 검색 대상에 관계없이 항상 작동하는지 확인하는 것보다 더 깁니다.

클립 보드를 통해 입력을받습니다.

설명:

p             Google the contents of the clipboard
gi            Select the search box
<End>         Move the cursor to the end of the text
 glamour shot Type " glamour shot"
<CR>          Press enter to search
fi2           Click the second link that begins with the letter "i" (images)
22j           Go 22 scroll steps down on the page.
              This makes it so that the first row of images are at
              the very top of the screen.

f<CR>         Click the first clickable element, which is the
              first image because we scrolled down

fim2          Click the second link containing "im" (view image)

최첨단 사례를 찾은 @TaylorScott에게 감사합니다.



@TaylorScott 그렇지 않지만 Firefox에서 권장 사항을 얻을 수 없습니다. 브라우저에 따라 다를 수 있습니까?
BlackCap

1
나는 다른 검색을 위해 그것들을 얻었습니다
BlackCap

3

파이썬 3.6 247 242 아마 232 224 바이트

이것은 이것을 해결하려는 귀여운 시도입니다. 파일을 p.png현재 디렉토리 와 같이 저장합니다 .

import sys; import requests as r; from bs4 import BeautifulSoup as s;
n = sys.argv[1]; open('p.png', 'wb').write(r.get(s(r.get(f'https://www.google.com.br/search?tbm=isch&q={n}+glamour+shot').content,'lxml').find_all('img')[1].get('src')).content)

명령 줄에서 쉽게 실행하려면 위의 내용을 파일에 glamour.py넣고 다음 과 같이 실행하십시오.

$ python glamour.py NAME_YOU_WANT

업데이트 1 : 새로운 Google URL로 더 나은 버전

import sys; import requests as r; from bs4 import BeautifulSoup as s;
n = sys.argv[1]; open('p.png', 'wb').write(r.get(s(r.get(f'http://www.google.nl/search?tbm=isch&q={n}+glamour+shot').content,'lxml').find_all('img')[1].get('src')).content)

업데이트 2 :

몇 바이트를 절약했습니다.

  • 요청 모듈에서 get 함수 만 가져 와서
  • 변수에 f할당하지 않고 새로운 python 3.6 문자열 보간 플래그 활용sys.argv
  • 공백 제거
  • 하나의 라이너로 전환
  • BeautifulSoup호출 에서 파서 사양 제거

마지막 것은 프로그래머가 크로스 플랫폼 호환성을 위해 파서를 지정하도록 지시하는 std.output 메시지를 생성하기 때문에 논쟁의 여지가 있으므로 원하지 않는 출력으로 간주 될 수 있습니다.

다음은 224 바이트 버전입니다.

import sys;from requests import get;from bs4 import BeautifulSoup as s;open('p.png','wb').write(get(s(get(f'http://www.google.nl/search?tbm=isch&q={sys.argv[1]}+glamour+shot').content).find_all('img')[1].get('src')).content)

다음은 232 바이트 버전입니다.

import sys;from requests import get;from bs4 import BeautifulSoup as s;open('p.png','wb').write(get(s(get(f'http://www.google.nl/search?tbm=isch&q={sys.argv[1]}+glamour+shot').content, 'lxml').find_all('img')[1].get('src')).content)

그러나 std.out이 리디렉션 /dev/null되거나 다음과 같은 경우 더 짧은 버전을 사용할 수 있습니다 .


표준 라이브러리로 완전히 실행할 수 있도록 urllib + html.parse 버전이있을 수 있습니다.
Gui42

1
바이트를 절약하기 위해 대신 사용 www.google.nl/하거나 사용하는 것도 가능합니다.google.nlhttps://www.google.com.br/
Taylor Scott

1
어떤 이유로 든 http://요청과 작동 하도록 유지해야 합니다. 그러나 브라질 구글은 나에게 더 재미있는 결과를 줬다. 그래서 나는 재미있는 포인트를 느슨하게했다 : D
Gui42

Google 이와 같은 경우와 같이 다른 검색 결과를 추천하는 경우 를 처리합니다 ( 이러한 제안을 표시하려면 여러 번 검색해야 할 수도 있음)
Taylor Scott

또한 또는 n = 'something'; f'{n}_here'대신에 몇 바이트를 얻는 방법을 좋아합니다.n = 'something'; '{n}_here'.format(n = n)n = 'something'; '{}_here'.format(n)
Gui42

1

라켓, 284 바이

(require net/url html-parsing sxml racket/draw)(define(g n)(let([g(compose get-pure-port string->url string-append)])(make-object bitmap%(g(car((sxpath"//*[@id='ires']//@src/text()")(html->xexp(g"http://www.google.com/search?tbm=isch&q="(string-replace n" ""+")"+glamour+shot"))))))))

스크린 샷 : 여기에 이미지 설명을 입력하십시오

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.