शानदार ग्लैमर शॉट


11

यहाँ छवि विवरण दर्ज करें

यह तस्वीर आज वेब पर मिली। एक आलसी प्रोग्रामर होने के नाते, मैं वास्तव में गूगल नहीं खोलना चाहता और कुछ पात्रों को टाइप कर सकता हूं। बहुत काम का रास्ता! यह एक ऐसा महत्वपूर्ण कार्य है जिसे स्वचालित किया जाना चाहिए।

चुनौती

हर कोई जानता है कि 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]और (स्थान)। इस स्ट्रिंग को स्पेस से अलग किया जा सकता है, गूगल पर स्पेस सेपरेटेड स्ट्रिंग की खोज करने के लिए, किसी को स्पेस को बदलना चाहिए +। उदाहरण के लिए, यह एक मान्य क्वेरी है:
www.google.com/search?tbm=isch&q=Bassdrop+Cumberwubwubwub+glamour+shot

उत्पादन

छवि को या तो स्क्रीन पर खींचा जा सकता है, या फ़ाइल में सहेजा जा सकता है (किसी भी प्रारूप में)।
यदि Google पर पहला खोज परिणाम एक जिफ़ फ़ाइल है, तो आप या तो जिफ़ दिखा सकते हैं या उस जिफ़ के किसी भी फ्रेम को दिखा सकते हैं।

परीक्षण के मामलों

अपेक्षित परिणाम देखने के लिए इस स्निपेट को चलाएं

यह , बाइट्स जीत में सबसे छोटा कोड!


इनपुट में किन वर्णों का समर्थन करने की आवश्यकता है? क्या हमें URL एन्कोडिंग के बारे में चिंता करने की आवश्यकता है?
मार्टिन एंडर 10

@ मर्टिन एंडर [a-z0-9], ने मेरी पोस्ट को संपादित किया। यूआरएल मेरे द्वारा दिए गए उदाहरणों की तरह दिखाई देगा, कोई एन्कोडिंग की जरूरत नहीं है, बस स्पेस टू+
बेसड्रॉप कंबरवॉबवब

मुझे लगता है, A-Zआपके उदाहरण से भी, प्रकट हो सकता है?
मार्टिन एंडर

@MartinEnder हां, यह असंवेदनशील है। उल्लेख करने के लिए भूल गए
बेसड्रॉप कंबरवॉबवब

2
जब आप इस खेल को खेलते हैं तो बंदूक के साथ लोगों की एक आश्चर्यजनक संख्या होती है: डी
बीटा

जवाबों:


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एक स्ट्रिंग के रूप में इनपुट लेता है । इनपुट स्ट्रिंग के साथ रिक्त स्थान पर इनर-स्ट्रिंग स्क्रिप्ट ब्लॉक का उपयोग करके उपयुक्त Google स्थान पर Invoke-WebRequest( iwr) करता है । हम ले इस बात का है, जहां है हमारे इनपुट स्ट्रिंग। यह उचित थंबनेल विवरण के साथ लिंक देता है। उनमें से पहले एक को लें , इसके और इसे कोटेशन पर लें। चौथा तत्व भाग के अंदर का पाठ है , इसलिए हम उस पर एक और करते हैं , जो ile को स्थानीय फ़ोल्डर में निर्दिष्ट करता है । चूंकि ये सिर्फ Google द्वारा निर्मित थंबनेल हैं, वे jpg होने की गारंटी हैं।-replace+.links.innerhtml-like[0] .innerhtml-split[3]img src="iwr-outf$a.jpg


1
तुम बाहर बदल सकते हैं google.comके साथ google.nlके लिए -1 बाइट
टेलर स्कॉट

4

एक्सेल VBA + , 465 332 बाइट्स

नोट: संदर्भ का उपयोग करता है

  • Microsoft HTML ऑब्जेक्ट लाइब्रेरी
  • Microsoft इंटरनेट नियंत्रण
  • Microsoft स्क्रिप्टिंग रनटाइम

golfed:

पूर्ण Subदिनचर्या जो nअपेक्षित प्रकार के इनपुट (नाम के लिए संक्षिप्त) को लेती है Variant/Stringऔर उस नाम की क्वेरी और glamour shotएक इंटरनेट एक्सप्लोरर विंडो के लिए पहले Google छवि खोज परिणाम को आउटपुट करती है ।

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

-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

के Dim i as New ...साथ प्रतिस्थापित करने के लिए -3 बाइट्सSet i=New ...

SHDocVw.वर्ग संदर्भ को हटाने के लिए -8 बाइट्स

with iब्लॉक को हटाने के लिए -12 बाइट्स

-7 हटाने के लिए बाइट्स i.quit- इससे बैकग्राउंड में इंटरनेट एक्सप्लोरर को खुला छोड़ने से कुछ मेमोरी लीकेज हो जाती है, जैसे कि यह सिफारिश की जाती है कि या तो पूर्ण ungolfed संस्करण का उपयोग किया जाता है या उपयोग के बाद इंटरनेट एक्सप्लोरर कार्य को कार्य प्रबंधक के माध्यम से समाप्त किया जाता है

-6 i.navigateहेल्पर सबरूटीन में जाने के लिए बाइट्सh

-13 Do Until ... Loopहेल्पर सबरूटीन में जाने के लिए बाइट्स

-2 बाइट्स j=0को हेल्पर में डालकर हटाने ,jसे ,0(x2)

एक गुमनाम तत्काल विंडो फ़ंक्शन में परिवर्तित करने के लिए -11 बाइट्स

-8 बाइट्स for .. nextलूप में हेल्पर फ़ंक्शन कॉल को कम करने के लिए

से उत्पादन को बदलने के लिए -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



सौभाग्य से फ़ायरफ़ॉक्स में मानक खोज इंजन 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 अन्य खोज परिणामों की सिफारिश करता है जैसे कि इस तरह
टेलर स्कॉट

@TaylorScott यह नहीं है, लेकिन मैं फ़ायरफ़ॉक्स में सिफारिशें प्राप्त करने में असमर्थ हूं। क्या यह ब्राउज़र पर निर्भर हो सकता है?
ब्लैककैप

1
कोई बात नहीं, मैं उन्हें एक अलग खोज के लिए मिला
ब्लैककैप

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: नए गूगल यूआरएल के साथ बेहतर संस्करण

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:

मैंने कुछ बाइट्स बचाए:

  • केवल अनुरोध मॉड्यूल से प्राप्त फ़ंक्शन आयात करके
  • एक चर को fआवंटित किए बिना नए अजगर 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 के साथ एक संस्करण हो सकता है ताकि यह पूरी तरह से मानक पुस्तकालय के साथ चल सके।
गुई42

1
आप कुछ बाइट्स को बचाने के लिए संभवतः उपयोग कर सकते हैं www.google.nl/या शायद यहां तक ​​किgoogle.nlhttps://www.google.com.br/
टेलर स्कॉट

1
किसी कारण से, मुझे http://अनुरोधों के साथ काम करने के लिए इसे रखना होगा। लेकिन ब्राजील के गूगल ने मुझे मजेदार परिणाम दिए, इसलिए मैं मज़ेदार बिंदुओं पर ढीली हूँ: D
Gui42

क्या यह ऐसे मामलों को संभालता है जब Google अन्य खोज परिणामों की सिफारिश करता है जैसे कि इस तरह के मामले हैं (आपको पॉप अप करने के लिए इस तरह के सुझाव प्राप्त करने के लिए कई खोजों को करना पड़ सकता है)
टेलर स्कॉट

मुझे यह भी पसंद है कि कैसे मैं n = 'something'; f'{n}_here'इसके बजाय कुछ बाइट्स प्राप्त करने के लिए धन्यवादn = 'something'; '{n}_here'.format(n = n)n = 'something'; '{}_here'.format(n)
1942 में 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"))))))))

स्क्रीनशॉट: यहाँ छवि विवरण दर्ज करें

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.