कोड गोल्फ: Google परिणामों को पार्स करना


16

जब आप परिणाम पृष्ठ के भीतर Google पर कुछ खोजते हैं, तो उपयोगकर्ता परिणामों के पहले पृष्ठ के लिए हरे लिंक देख सकता है।

सबसे कम संभव रूप में, बाइट्स में, किसी भी भाषा का उपयोग करते हुए, उन लिंक को सूची के रूप में stdout में प्रदर्शित करें। स्टैक एक्सचेंज क्वेरी के पहले परिणामों के लिए यहां एक उदाहरण दिया गया है:

एक स्क्रीन कैप्चर

इनपुट:

आप चुनते हैं: URL ( www.google.com/search?q=stackexchange&ie=utf-8&oe=utf-8) या बसstackexchange

आउटपुट:

french.stackexchange.com/, stackoverflow.com/, fr.wikipedia.org/wiki/Stack_Exchange_Network, en.wikipedia.org/wiki/Stack_Exchange,...

नियम:

  • जब तक परिणाम https://www.google.com की खोज के समान नहीं होंगे तब तक आप URL शॉर्टनर या अन्य खोज उपकरण / API का उपयोग कर सकते हैं ।

  • यह ठीक है अगर आपके प्रोग्राम में वेब ब्राउज़र खोलने के साइड इफेक्ट्स हैं, तो क्रिप्टिक Google HTML / js पेज पढ़े जा सकते हैं क्योंकि वे प्रदान किए जाते हैं।

  • आप ब्राउज़र प्लगइन्स, उपयोगकर्ताओं का उपयोग कर सकते हैं ...

  • यदि आप स्टडआउट का उपयोग नहीं कर सकते हैं, तो इसे स्क्रीन पर प्रिंट करें, जैसे। एक पॉपअप या जावास्क्रिप्ट अलर्ट!

  • आपको समाप्ति / या प्रारंभिक http (s) की आवश्यकता नहीं है: //

  • आपको कोई अन्य लिंक नहीं दिखाना चाहिए

  • सबसे छोटा कोड जीतता है!

  • सौभाग्य !

EDIT: यह गोल्फ 07/08/15 को समाप्त होता है।


चूंकि आप उपयोग कर रहे हैं google.fr, क्या हमें उसका भी उपयोग करना है?
बीटा डेके

आप अपनी इच्छानुसार किसी भी google का उपयोग कर सकते हैं। मैं फ्रेंच हूं, इसलिए मैंने .fr का उपयोग किया, लेकिन आप .com या .anything का उपयोग कर सकते हैं :) कोई बात नहीं
WayToDoor

और छोटे यूआरएल जैसे कि gogle.deठीक हैं?
बीटा डेके

आप URL शॉर्टर्स या अन्य खोज टूल / API का उपयोग तब तक कर सकते हैं जब तक परिणाम google.com पर खोज के समान नहीं होंगे , इसलिए हां
WayToDoor

6
यदि आप लुभाए जाते हैं: याद रखें कि आप HTML को regex
Luis Mendo

जवाबों:


17

बाश + grep + lynx, ३p

चूंकि हम एक वेब ब्राउज़र खोल सकते हैं, तो मैं उपयोग करूंगा lynx:

lynx -dump $1|grep -Po '(?<=d:)[^&]+'

( grepइसके बजाय उपयोग के लिए @manatwork के लिए धन्यवाद sed)

हम एक पैरामीटर के रूप में पूरे URL में पास होते हैं:

$ ./gr.sh "www.google.com/search?q=stackexchange&ie=utf-8&oe=utf-8"
http://stackexchange.com/
https://en.wikipedia.org/wiki/Stack_Exchange
https://twitter.com/stackexchange
https://play.google.com/store/apps/details?id=com.stackexchange.marvin
https://github.com/StackExchange/StackExchange.Redis
https://github.com/StackExchange/StackExchange.Redis/blob/master/Docs/Basics.md
https://www.crunchbase.com/organization/stack-exchange
$ 

जो समान सूची देता है:

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


वैसे यह आसान है: D
बीटा डेके

3
sedअच्छा। sedलंबा। GNU आज़माएं grep:grep -Po '(?<=d:)[^&]+'
manatwork

@manatwork हाँ, निश्चित रूप से - धन्यवाद!
डिजिटल ट्रॉमा

1
क्या उत्तर शीर्षक कापिपेट किया गया था? ;) कोई भी bash, lynxया sed(और अब grep) कोरुटिल का हिस्सा नहीं है।
मैनेटवर्क

3
मेरा मानना ​​है कि आप यह भी कर सकते हैं: lynx -dump $1|grep -Po 'd:\K[^&]+'(
अप्राप्त

4

रूबी, 91 77 बाइट्स

require'open-uri';open(gets).read.scan(/ed:(.*?)\+/){|x|puts URI.decode x[0]}

सभी के बिना छोटा होता require। अर्घ !!! संपादित करें : तो, पता चला है, मैं नहीं है दूसरे की आवश्यकता की जरूरत है! यह इंगित करने के लिए @manatwork का धन्यवाद।

पुराना संस्करण (बेकार के साथ require):

require'open-uri';require 'uri';open(gets).read.scan(/ed:(.*?)\+/){|x|puts URI.decode x[0]}

नियम कमांड लाइन विकल्पों का उपयोग तब तक करने की अनुमति देते हैं जब तक आप उन्हें भी गिनते हैं: pastebin.com/PnpjnXji (यदि आपको लगता है कि यह अनुचित शैली है, तो कोड ब्लॉक में केवल परिवर्तन का उपयोग करने के लिए स्वतंत्र महसूस करें।)
मैनटवर्क

क्या आप वाकई स्पष्ट रूप से आवश्यक हैं require'uri'? 2.1.2 में मैं URIखुले-उरई की आवश्यकता के बाद उपलब्ध मॉड्यूल का उपयोग करता हूं ।
मैनटवर्क

@manatwork धन्यवाद! अपडेट किया गया।
kirbyfan64sos

बस मेरी जिज्ञासा के लिए: मेरे पास्टबिन विकल्प के रूप में कोड ब्लॉक को नहीं बदलने का कोई कारण? (बेशक, मैं तकनीकी कारणों के बारे में उत्सुक हूं, व्यक्तिगत कारणों से नहीं, अगर वह आपको वापस पकड़ ले।)
मैंटवर्क

@ मैनटवर्क मुझे करने की जरूरत है, लेकिन मैं इस समय बाइट काउंट का पता लगाने में बहुत आलसी था। :)
kirbyfan64sos

4

वोल्फ्राम भाषा (गणितज्ञ), १३५

StringJoin/@(Cases[URLExecute["www.google.com/search",{"q"->#},"XMLObject"],XMLElement["cite",_,l_]:>l,-1]/.XMLElement["b",_,{s_}]:>s)&

अधिक पठनीय:

StringJoin/@(Cases[
    URLExecute["www.google.com/search",{"q"->#},"XMLObject"], 
    XMLElement["cite",_,l_]:>l,-1] /. 
    XMLElement["b",_,{s_}]:>s)

क्या वास्तव में रिक्त स्थान आवश्यक हैं? उनके बिना, मुझे 136 बाइट्स मिलते हैं ।
kirbyfan64sos

ज़रूरी नहीं है ... मुझे वास्तव में इसे
कसना

क्या आप इस जवाब को छोटा करने के लिए कुछ कर सकते हैं ?
डिजिटल ट्रामा

3

पायथन 3, 141 बाइट्स

डिजिटल ट्रॉमा के उत्तर के पास कहीं भी नहीं है, लेकिन रेगेक्स: डी के बाहर काम करना मजेदार था

import re
print('\n'.join(map(lambda x:x[3:],re.findall('te>http[s]?://\w+\.[a-z]+[](/a-z\.)?]+',__import__("requests").get(input()).text))))

इनपुट के http://www.google.com/search?q=stackexchange&ie=utf-8&oe=utf-8लिए प्रोग्राम आउटपुट:

https://en.wikipedia.org/wiki/
https://twitter.com/
https://play.google.com/store/apps/details?id...
https://www.crunchbase.com/organization/
https://www.facebook.com/
https://github.com/

इम्प्लाइज grc की नोक


क्या आपको वास्तव में उपयोग करने की आवश्यकता है __import__?
cjjbgames

इसके अलावा, एक [x for x in spam]निर्माण का उपयोग करें map। यह आपको अच्छी संख्या में बाइट्स बचाएगा।
ckjbgames

2

फैक्टर, 31 बाइट्स

इसके लिए एक पुस्तकालय होना आवश्यक है।

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