Yahoo! search interface: Difference between revisions

Content added Content deleted
No edit summary
(Added Kotlin)
Line 608: Line 608:
}
}
}</lang>
}</lang>

=={{header|Kotlin}}==
This is based on the C# entry but uses a regular expression based on what appears to be the Yahoo! format as at the date of this entry (4 December 2017).
<lang scala>// version 1.2.0

import java.net.URL

val rx = Regex("""<div class=\"yst result\">.+?<a href=\"(.*?)\" class=\"\">(.*?)</a>.+?class="abstract ellipsis">(.*?)</p>""")

class YahooResult(var title: String, var link: String, var text: String) {

override fun toString() = "\nTitle: $title\nLink : $link\nText : $text"
}

class YahooSearch(val query: String, val page: Int = 0) {

private val content: String

init {
val yahoo = "http://search.yahoo.com/search?"
val url = URL("${yahoo}p=$query&b=${page * 10 + 1}")
content = url.readText()
}

val results: MutableList<YahooResult>
get() {
val list = mutableListOf<YahooResult>()
for (mr in rx.findAll(content)) {
val title = mr.groups[2]!!.value.replace("<b>", "").replace("</b>", "")
val link = mr.groups[1]!!.value
val text = mr.groups[3]!!.value.replace("<b>", "").replace("</b>", "")
list.add (YahooResult(title, link, text))
}
return list
}

fun nextPage() = YahooSearch(query, page + 1)

fun getPage(newPage: Int) = YahooSearch(query, newPage)
}

fun main(args: Array<String>) {
for (page in 0..1) {
val x = YahooSearch("rosettacode", page)
println("\nPAGE ${page + 1} =>")
for (result in x.results.take(3)) println(result)
}
}</lang>

Output (restricted to first three results on first two pages):
<pre>
PAGE 1 =>

Title: Rosetta Code - Official Site
Link : http://rosettacode.org/wiki/Rosetta_Code
Text : Rosetta Code is a programming chrestomathy site. The idea is to present solutions to the same task in as ...

Title: Rosetta Code - Wikipedia
Link : https://en.wikipedia.org/wiki/Rosetta_Code
Text : Rosetta Code is a wiki-based programming chrestomathy website with implementations of common algorithms ...

Title: Rosetta Code (@rosettacode) | Twitter
Link : https://twitter.com/rosettacode
Text : The latest Tweets from Rosetta Code (@rosettacode). Twitter account for http://t.co/DuRZFWDfRn. The ...

PAGE 2 =>

Title: Rosetta Code Blog
Link : http://blog.rosettacode.org/
Text : As I noted, there was an expectation of downtime as the VPS hostRosetta Code sits on moved from one data ...

Title: Rosetta Code - Wikipedia
Link : https://en.wikipedia.org/wiki/User:Paddy3118/Rosetta_Code
Text : Rosetta Code is a wiki-based programming chrestomathy website with implementations of common algorithms ...

Title: Rosetta Code and ABAP | SAP Blogs
Link : https://blogs.sap.com/2015/03/27/rosetta-code-and-abap/
Text : Last week Christian Drumm (@ceedee666) and Fred Verheul (@fredverheul) had a short conversation on ...
</pre>


=={{header|Mathematica}}==
=={{header|Mathematica}}==