ช็อตเด็ดเย้ายวนใจ


11

ป้อนคำอธิบายรูปภาพที่นี่

พบรูปนี้บนเว็บวันนี้ ในฐานะโปรแกรมเมอร์ขี้เกียจฉันไม่ต้องการที่จะเปิด google และพิมพ์ตัวละครสองสามตัว วิธีการทำงานมากเกินไป! นี่เป็นงานสำคัญที่ควรทำโดยอัตโนมัติ

ท้าทาย

ทุกคนรู้ว่าภาพแรกในผลการค้นหาของ Google นั้นดีที่สุดเสมอ ดังนั้นจึงควรแสดงต่อผู้ใช้

คุณต้องเขียนโปรแกรมหรือฟังก์ชั่นซึ่งใช้สตริงเป็นพารามิเตอร์และแสดงภาพแรกที่พบใน google เมื่อคุณค้นหาชื่อ + คำที่glamour shotอยู่เบื้องหลัง

คำค้นหาของ Google

การค้นหาภาพใน google URL ควรมีพารามิเตอร์การค้นหาtbm=ischและq=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 จะมีลักษณะเหมือนตัวอย่างที่ฉันให้ไว้ไม่จำเป็นต้องเข้ารหัสเพียงเพื่อพื้นที่+
Bassdrop Cumberwubwubwub

ฉันเดาว่าA-Zจะปรากฏตัวตัดสินตัวอย่างของคุณได้หรือไม่
Martin Ender

@MartinEnder ใช่มันเป็นกรณีตาย ลืมพูดถึง
Bassdrop Cumberwubwubwub

2
มีผู้คนจำนวนมากที่โพสท่าด้วยปืนเมื่อคุณเล่นเกมนี้: D
Beta Decay

คำตอบ:


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) ไปยังตำแหน่ง Google ที่เหมาะสมโดยใช้การบล็อกสคริปต์สตริงภายในเพื่อ-replaceเว้นวรรคด้วย+ในสตริงการป้อนข้อมูล เราใช้.linksของที่ที่.innerhtmlเป็น-likeสายป้อนของเรา ที่ให้ลิงค์กับคำอธิบายภาพย่อที่เหมาะสม ใช้คนแรก[0]ของพวกเขาเอามัน .innerhtmlและ-splitมันในใบเสนอราคา [3]องค์ประกอบที่สี่คือข้อความที่อยู่ในimg src="ส่วนดังนั้นเราจึงทำอย่างiwrนั้นโดยระบุ-outfile ให้อยู่$a.jpgในโฟลเดอร์ในเครื่อง เนื่องจากนี่เป็นเพียงภาพขนาดย่อที่สร้างโดย Google จึงรับประกันได้ว่าจะเป็น jpg


1
คุณสามารถเปลี่ยนgoogle.comด้วยgoogle.nl-1 ไบต์
Taylor Scott

4

Excel VBA + , 465 332 ไบต์

หมายเหตุ:ใช้การอ้างอิงถึง

  • ไลบรารีวัตถุ Microsoft HTML
  • การควบคุมอินเทอร์เน็ตของ Microsoft
  • Microsoft Scripting Runtime

แข็งแรงเล่นกอล์ฟ:

Subรูทีนเต็มรูปแบบที่รับอินพุตn(ย่อมาจากชื่อ) ของประเภทที่คาดหวังVariant/Stringและส่งออกผลลัพธ์การค้นหารูปภาพ Google แรกสำหรับการสืบค้นชื่อนั้นและglamour shotไปยังหน้าต่าง 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 ไบต์สำหรับการลบพื้นที่สีขาว If InStr(1, a.href, "imgres") Then

-2 ไบต์สำหรับการเปลี่ยน.navigate (a.href)เป็น.navigate a.href

-27 ไบต์สำหรับการลดfor each a in ... if (...) then ... end if .. nextลูปเป็นdo until ... loop

-10 ไบต์สำหรับกลั่นimgresไปresและencryptedจะyp

-8 ไบต์สำหรับการลบ initalizers สำหรับj, kและสมมติโมดูลสะอาด

-1 ไบต์สำหรับการเปลี่ยนgoogle.comเป็นgoogle.nl

-3 ไบต์สำหรับการแทนที่Dim i as New ...ด้วยSet i=New ...

-8 ไบต์สำหรับการลบSHDocVw.การอ้างอิงระดับ

-12 ไบต์สำหรับการลบwith iบล็อก

-7 ไบต์สำหรับการลบi.quit- ทำให้เกิดการรั่วไหลของหน่วยความจำบางอย่างโดยเปิด Internet explorer ไว้ในพื้นหลังดังนั้นจึงแนะนำให้ใช้ทั้งเวอร์ชัน ungolfed เต็มรูปแบบแทนหรืองาน Internet explorer ถูกยกเลิกผ่าน task manager หลังจากใช้งาน

-6 ไบต์สำหรับการย้ายi.navigateเข้าสู่รูทีนย่อย helperh

-13 ไบต์สำหรับการย้ายDo Until ... Loopเข้าสู่รูทีนย่อย helper

-2 ไบต์โดยการย้ายj=0เข้าผู้ช่วยและลบ,j, ,0(x2)

-11 ไบต์สำหรับการแปลงเป็นฟังก์ชั่นหน้าต่างที่ไม่ระบุชื่อทันที

-8 ไบต์สำหรับการลดฟังก์ชั่นผู้ช่วยโทรเข้ามาในfor .. nextวง

-16 ไบต์สำหรับการเปลี่ยนเอาต์พุตจากSheets(1)วัตถุรูปภาพเป็นการแสดงผ่านInternetExplorerวัตถุ

Ungolfed, 1304 Bytes

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

Vimperator , 30 keystrokes

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 สำหรับการค้นหาเคส


กรณีนี้จัดการได้หรือไม่เมื่อ google แนะนำผลการค้นหาอื่น ๆ เช่นเดียวกับกรณีนี้
Taylor Scott

@TaylorScott มันไม่ได้ แต่ฉันไม่สามารถรับคำแนะนำใน Firefox ได้ มันขึ้นอยู่กับเบราว์เซอร์หรือไม่?
BlackCap

1
ไม่เป็นไรฉันให้พวกเขาค้นหาอีกครั้ง
BlackCap

3

Python 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: รุ่นที่ดีขึ้นด้วย URL ใหม่ของ Google

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ให้กับตัวแปร
  • กำจัดช่องว่างสีขาว
  • เปลี่ยนเป็นซับเดียว
  • ลบข้อกำหนด parser ออกจากการBeautifulSoupโทร

อันสุดท้ายคือการโต้เถียงเพราะมันส่งผลให้ข้อความ std.output บอกโปรแกรมเมอร์เพื่อระบุ parser สำหรับการทำงานร่วมกันข้ามแพลตฟอร์มดังนั้นมันอาจจะถือว่าเป็นผลลัพธ์ที่ไม่พึงประสงค์

นี่คือเวอร์ชั่น 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หรือบางสิ่ง: D


ฉันอาจมีรุ่นที่มี urllib + html.parse เพื่อให้สามารถทำงานกับไลบรารีมาตรฐานทั้งหมดได้
Gui42

1
คุณน่าจะใช้www.google.nl/หรืออาจจะgoogle.nlแทนที่จะhttps://www.google.com.br/บันทึกบางไบต์
Taylor Scott

1
ด้วยเหตุผลบางอย่างฉันต้องเก็บไว้ http://เพื่อให้ทำงานกับคำขอได้ แต่ google แบบชาวบราซิลให้ผลลัพธ์ที่สนุกกว่าดังนั้นฉันจึงทำคะแนนสนุก: D
Gui42

ไม่นี้กรณีจับเมื่อ Google ขอแนะนำให้ผลลัพธ์การค้นหาอื่นเป็นกรณีดังกล่าวเช่นนี้ (คุณอาจจะต้องทำการค้นหาหลายที่จะได้รับข้อเสนอแนะเช่นนี้จะปรากฏขึ้น)
เทย์เลอร์สกอตต์

ฉันยังรักวิธีที่ฉันได้รับไม่กี่ไบต์ขอบคุณ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.