神话般的魅力射门


11

在此处输入图片说明

今天在网上找到了这张照片。作为一个懒惰的程序员,我不想打开谷歌并输入几个字符。太多的工作!这是一项非常重要的任务,应该将其自动化。

挑战

每个人都知道,google搜索结果中的第一张图片始终是最好的。因此,应将其呈现给用户。

您要编写一个程序或函数,该程序或函数使用字符串作为参数,并在搜索该名称及其glamour shot后面的单词时显示它在google上找到的第一个图像。

Google搜索查询

要在Google上搜索图片,该网址应包含查询参数tbm=ischq=query,并query为您要搜索的名称。
我的名字有效的查询字符串Baswww.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],编辑了我的帖子。网址看起来像我提供的示例,无需编码,仅需空格即可+
Bassdrop Cumberwubwubwub

我猜,A-Z也可以出现,以您的榜样判断?
Martin Ender

@MartinEnder是的,不区分大小写。忘了提及
Bassdrop Cumberwubwubwub

2
当您玩此游戏时,有很多人拿着枪摆姿势:D
Beta Decay

Answers:


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-WebRequestiwr)到适当的Google位置。我们采用其中的,其中的是我们的输入字符串。这样就产生了带有正确缩略图描述的链接。先取其中之一,以和它的报价。第四个元素是该部分内部的文本,因此我们对此进行了另一个处理,将ile 指定为本地文件夹中。由于这些只是Google生成的缩略图,因此可以保证它们是jpg。-replace+.links.innerhtml-like[0] .innerhtml-split[3]img src="iwr-outf$a.jpg


1
你能不能改一下google.comgoogle.nl了-1字节
泰勒·斯科特

4

Excel VBA +465332字节

注意:使用引用来

  • Microsoft HTML对象库
  • Microsoft Internet控件
  • Microsoft脚本运行时

打高尔夫球:

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字节用于冷凝imgresresencryptedyp

-8字节用于去除initalizers为jk并且假定清洁模块

-1字节用于更改google.comgoogle.nl

-3个字节,用于替换Dim i as New ...Set i=New ...

-8个字节,用于删除SHDocVw.类引用

-12个字节用于删除with i

-7个字节用于删除i.quit-这会通过在后台打开Internet Explorer导致一些内存泄漏,因此建议您使用完整的非高尔夫版本,或者使用后通过任务管理器终止Internet Explorer任务

-6个字节用于i.navigate移入帮助程序子例程h

-13字节用于Do Until ... Loop移入辅助程序

通过j=0移入辅助程序并删除,j,0(x2)-2字节

-11个字节,用于转换为匿名立即窗口函数

-8个字节,用于减少辅助函数调用的for .. next循环

-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

用法Gif


3

Vimperator,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网址的更好版本

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函数
  • 利用新的python 3.6字符串插值f标志,而无需将分配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或:D,则可以使用较短的版本


我可能拥有urllib + html.parse的版本,以便它可以完全与标准库一起运行。
Gui42

1
www.google.nl/可能甚至可以使用或什至google.nl代替https://www.google.com.br/保存一些字节
Taylor Scott

1
由于某种原因,我必须保留http://它以处理请求。但是巴西的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"))))))))

屏幕截图: 在此处输入图片说明

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.