Bắn quyến rũ tuyệt vời


11

nhập mô tả hình ảnh ở đây

Tìm thấy hình ảnh này trên web ngày hôm nay. Là một lập trình viên lười biếng, tôi không thực sự muốn mở google và nhập một vài ký tự. Cách làm việc quá nhiều! Đây là một nhiệm vụ quan trọng mà nó nên được tự động hóa.

Thử thách

Mọi người đều biết rằng hình ảnh đầu tiên trong kết quả tìm kiếm của google luôn là tốt nhất. Do đó nó nên được trình bày cho người dùng.

Bạn phải viết một chương trình hoặc hàm lấy một chuỗi làm tham số và hiển thị hình ảnh đầu tiên nó tìm thấy trên google khi bạn tìm kiếm tên đó + các từ glamour shotđằng sau nó.

Truy vấn tìm kiếm của Google

Để tìm kiếm hình ảnh trên google, url nên chứa tham số truy vấn tbm=ischq=query, với querytên bạn muốn tìm kiếm.
Một chuỗi truy vấn hợp lệ cho tên của tôi Bassẽ làwww.google.com/search?tbm=isch&q=Bas

Đầu vào

Chương trình hoặc chức năng của bạn có một tham số đầu vào duy nhất, đó là tên bạn muốn tìm kiếm trên google. Chuỗi này sẽ bao gồm các ký tự [a-z], [A-Z], [0-9](không gian). Chuỗi này có thể được phân tách không gian, để tìm kiếm một chuỗi tách biệt không gian trên google, người ta nên thay thế khoảng trắng bằng +. Ví dụ: đây là một truy vấn hợp lệ:
www.google.com.vn/search?tbm=isch&q=Bassdrop+Cumberwubwubwub+glamour+shot

Đầu ra

Hình ảnh có thể được vẽ ra màn hình hoặc lưu vào một tệp (ở bất kỳ định dạng nào).
Nếu kết quả tìm kiếm đầu tiên trên google là tệp gif, bạn có thể hiển thị gif hoặc hiển thị bất kỳ khung nào của gif đó.

Các trường hợp thử nghiệm

Chạy đoạn mã này để xem kết quả mong đợi

Đây là , mã ngắn nhất tính bằng byte thắng!


Những ký tự cần được hỗ trợ trong đầu vào? Chúng ta có cần phải lo lắng về mã hóa URL không?
Martin Ender

@Martin Ender [a-z0-9], đã chỉnh sửa bài viết của tôi. Các url sẽ trông giống như các ví dụ tôi đã cung cấp, không cần mã hóa, chỉ cần không gian để+
Bassdrop Cumberwubwubwub

Tôi đoán, A-Zcũng có thể xuất hiện, đánh giá bằng ví dụ của bạn?
Martin Ender

@MartinEnder Vâng, đó là trường hợp không nhạy cảm. Quên đề cập đến
Bassdrop Cumberwubwubwub

2
Có một số lượng đáng ngạc nhiên những người tạo dáng với súng khi bạn chơi trò chơi này: D
Beta Decay

Câu trả lời:


8

PowerShell v4 +, 160 byte

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 đầu vào $adưới dạng một chuỗi. Có Invoke-WebRequest( iwr) đến vị trí thích hợp của Google không, sử dụng khối tập lệnh chuỗi bên trong vào -replacekhoảng trắng +trong chuỗi đầu vào. Chúng tôi lấy .linksđó, trong đó .innerhtml-likechuỗi đầu vào của chúng tôi. Điều đó mang lại các liên kết với mô tả hình thu nhỏ thích hợp. Lấy cái đầu tiên [0]trong số đó, lấy .innerhtml-splittrích dẫn. Phần [3]tử thứ tư là văn bản bên trong img src="phần, vì vậy chúng tôi thực hiện một phần khác iwrvề phần đó, chỉ định -outfile nằm $a.jpgtrong thư mục cục bộ. Vì đây chỉ là hình thu nhỏ do Google tạo, nên chúng được đảm bảo là jpg.


1
bạn có thể thay đổi google.comvới google.nl-1 byte
Taylor Scott

4

Excel VBA + , 465 332 byte

LƯU Ý: Sử dụng Tài liệu tham khảo

  • Thư viện đối tượng Microsoft HTML
  • Kiểm soát Internet của Microsoft
  • Microsoft Scripting Runtime

Chơi gôn

Toàn bộ Subthói quen lấy đầu vào n(viết tắt của tên) của loại dự kiến Variant/Stringvà đưa ra kết quả tìm kiếm hình ảnh google đầu tiên cho truy vấn của tên đó và glamour shotđến cửa sổ trình duyệt internet explorer.

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 byte để loại bỏ khoảng trắng trong If InStr(1, a.href, "imgres") Then

-2 byte để thay đổi .navigate (a.href)thành.navigate a.href

-27 byte để giảm for each a in ... if (...) then ... end if .. nextvòng lặp thànhdo until ... loop

-10 byte cho ngưng tụ imgresđể resencryptedđểyp

-8 bytes để loại bỏ initalizers cho j, kvà giả định mô-đun sạch

-1 byte để thay đổi google.comthànhgoogle.nl

-3 byte để thay thế Dim i as New ...bằngSet i=New ...

-8 byte để xóa SHDocVw.tham chiếu lớp

-12 byte để loại bỏ with ikhối

-7 byte để xóa i.quit- điều này gây ra một số rò rỉ bộ nhớ bằng cách để trình thám hiểm internet mở ở chế độ nền, do đó, nên sử dụng phiên bản không mã hóa đầy đủ hoặc tác vụ của trình thám hiểm internet bị chấm dứt thông qua trình quản lý tác vụ sau khi sử dụng

-6 byte để chuyển i.navigatesang chương trình con của trình trợ giúph

-13 byte để chuyển Do Until ... Loopsang chương trình con của trình trợ giúp

-2 byte bằng cách di chuyển j=0vào trình trợ giúp và loại bỏ ,j, ,0(x2)

-11 byte để chuyển đổi thành chức năng cửa sổ ngay lập tức ẩn danh

-8 byte để giảm các lệnh gọi hàm trợ giúp thành for .. nextvòng lặp

-16 byte để thay đổi đầu ra từ Sheets(1)đối tượng hình ảnh sang hiển thị thông qua InternetExplorerđối tượng

Ungolfed, 1304 byte

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

Cách sử dụng gif

Cách sử dụng Gif


3

Vimperator , 30 tổ hợp phím

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

Hoặc 27 lần nhấn phím nếu bạn không cần hình ảnh có độ phân giải cao nhất:

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

Video: https://youtu.be/t8824UjlYt8



May mắn thay, công cụ tìm kiếm tiêu chuẩn trong Firefox là google và Vimperator cho phép bạn nhập các gợi ý theo mặc định. Điều này dài hơn nó phải đảm bảo rằng nó luôn hoạt động bất kể bạn tìm kiếm gì.

Đưa đầu vào qua bảng tạm.

Giải trình:

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)

Cảm ơn @TaylorScott vì đã tìm thấy một trường hợp cạnh.


Điều này có xử lý các trường hợp khi google đề xuất các kết quả tìm kiếm khác như các trường hợp như thế này không
Taylor Scott

@TaylorScott Không, nhưng tôi không thể nhận được đề xuất trong Firefox. Nó có thể phụ thuộc vào trình duyệt?
BlackCap

1
Không bao giờ, tôi đã nhận được chúng cho một tìm kiếm khác
BlackCap

3

Python 3.6, 247 242 232 có thể là 224 byte

Đây là một nỗ lực dễ thương để giải quyết điều này. Nó sẽ lưu một tập tin như p.pngtrong thư mục hiện tại.

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)

Để dễ dàng chạy nó từ dòng lệnh, chỉ cần đặt nội dung trên vào một tệp, chẳng hạn như glamour.pyvà chạy:

$ python glamour.py NAME_YOU_WANT

Cập nhật 1: Phiên bản tốt hơn với url google mới

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)

Cập nhật 2:

Tôi đã lưu một vài byte:

  • Bằng cách chỉ nhập hàm get từ mô-đun yêu cầu
  • tận dụng fcờ nội suy chuỗi python 3.6 mới mà không cấp phát sys.argvcho một biến
  • loại bỏ một số khoảng trắng
  • biến nó thành một lớp lót
  • xóa đặc tả trình phân tích cú pháp khỏi BeautifulSoupcuộc gọi

Cái cuối cùng gây tranh cãi, vì nó dẫn đến một thông báo std.output nói với lập trình viên chỉ định trình phân tích cú pháp để tương thích đa nền tảng, vì vậy nó có thể được coi là đầu ra không mong muốn.

Đây là phiên bản 224 byte:

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)

Đây là phiên bản 232 byte:

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)

Nhưng phiên bản ngắn hơn có thể được sử dụng nếu std.out được chuyển hướng đến /dev/nullhoặc một cái gì đó: D


Tôi có thể có một phiên bản với urllib + html.parse để nó có thể chạy hoàn toàn với thư viện chuẩn.
Gui42

1
bạn có thể sử dụng www.google.nl/hoặc thậm chí google.nlthay vì https://www.google.com.br/để lưu một số byte
Taylor Scott

1
vì một số lý do, tôi phải giữ http://cho nó hoạt động với các yêu cầu. Nhưng google Brazil đã cho tôi kết quả hài hước hơn, vì vậy tôi mất điểm thú vị: D
Gui42

Điều này có xử lý các trường hợp khi google đề xuất các kết quả tìm kiếm khác như các trường hợp như thế này không (bạn có thể phải thực hiện nhiều tìm kiếm để nhận đề xuất như thế này để bật lên)
Taylor Scott

Tôi cũng thích cách tôi có được một vài byte nhờ vào n = 'something'; f'{n}_here'thay vì n = 'something'; '{n}_here'.format(n = n)hoặcn = 'something'; '{}_here'.format(n)
Gui42

1

Vợt, tạm biệt 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"))))))))

Ảnh chụp màn hình: nhập mô tả hình ảnh ở đây

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.