Initial data commit
This commit is contained in:
parent
72d218235f
commit
f23f22d71c
199087 changed files with 3378941 additions and 0 deletions
157
Task/Yahoo-search-interface/Java/yahoo-search-interface.java
Normal file
157
Task/Yahoo-search-interface/Java/yahoo-search-interface.java
Normal file
|
|
@ -0,0 +1,157 @@
|
|||
import java.io.BufferedReader;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStreamReader;
|
||||
import java.net.MalformedURLException;
|
||||
import java.net.URISyntaxException;
|
||||
import java.net.URL;
|
||||
import java.net.URLDecoder;
|
||||
import java.net.URLEncoder;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.regex.Matcher;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
class YahooSearch {
|
||||
private String query;
|
||||
// Page number
|
||||
private int page = 1;
|
||||
// Regexp to look for the individual results in the returned page
|
||||
private static final Pattern pattern = Pattern.compile(
|
||||
"<a class=\"yschttl spt\" href=\"[^*]+?\\*\\*([^\"]+?)\">(.+?)</a></h3>.*?<div class=\"(?:sm-abs|abstr)\">(.+?)</div>");
|
||||
|
||||
public YahooSearch(String query) {
|
||||
this.query = query;
|
||||
}
|
||||
|
||||
public List<YahooResult> search() throws MalformedURLException, URISyntaxException, IOException {
|
||||
// Build the search string, starting with the Yahoo search URL,
|
||||
// then appending the query and optionally the page number (if > 1)
|
||||
StringBuilder searchUrl = new StringBuilder("http://search.yahoo.com/search?");
|
||||
searchUrl.append("p=").append(URLEncoder.encode(query, "UTF-8"));
|
||||
if (page > 1) {searchUrl.append("&b=").append((page - 1) * 10 + 1);}
|
||||
// Query the Yahoo search engine
|
||||
URL url = new URL(searchUrl.toString());
|
||||
List<YahooResult> result = new ArrayList<YahooResult>();
|
||||
StringBuilder sb = new StringBuilder();
|
||||
// Get the search results using a buffered reader
|
||||
BufferedReader in = null;
|
||||
try {
|
||||
in = new BufferedReader(new InputStreamReader(url.openStream()));
|
||||
// Read the results line by line
|
||||
String line = in.readLine();
|
||||
while (line != null) {
|
||||
sb.append(line);
|
||||
line = in.readLine();
|
||||
}
|
||||
}
|
||||
catch (IOException ioe) {
|
||||
ioe.printStackTrace();
|
||||
}
|
||||
finally {
|
||||
try {in.close();} catch (Exception ignoreMe) {}
|
||||
}
|
||||
String searchResult = sb.toString();
|
||||
// Look for the individual results by matching the regexp pattern
|
||||
Matcher matcher = pattern.matcher(searchResult);
|
||||
while (matcher.find()) {
|
||||
// Extract the result URL, title and excerpt
|
||||
String resultUrl = URLDecoder.decode(matcher.group(1), "UTF-8");
|
||||
String resultTitle = matcher.group(2).replaceAll("</?b>", "").replaceAll("<wbr ?/?>", "");
|
||||
String resultContent = matcher.group(3).replaceAll("</?b>", "").replaceAll("<wbr ?/?>", "");
|
||||
// Create a new YahooResult and add to the list
|
||||
result.add(new YahooResult(resultUrl, resultTitle, resultContent));
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
public List<YahooResult> search(int page) throws MalformedURLException, URISyntaxException, IOException {
|
||||
// Set the page number and search
|
||||
this.page = page;
|
||||
return search();
|
||||
}
|
||||
|
||||
public List<YahooResult> nextPage() throws MalformedURLException, URISyntaxException, IOException {
|
||||
// Increment the page number and search
|
||||
page++;
|
||||
return search();
|
||||
}
|
||||
|
||||
public List<YahooResult> previousPage() throws MalformedURLException, URISyntaxException, IOException {
|
||||
// Decrement the page number and search; if the page number is 1 return an empty list
|
||||
if (page > 1) {
|
||||
page--;
|
||||
return search();
|
||||
} else return new ArrayList<YahooResult>();
|
||||
}
|
||||
}
|
||||
|
||||
class YahooResult {
|
||||
private URL url;
|
||||
private String title;
|
||||
private String content;
|
||||
|
||||
public URL getUrl() {
|
||||
return url;
|
||||
}
|
||||
|
||||
public void setUrl(URL url) {
|
||||
this.url = url;
|
||||
}
|
||||
|
||||
public void setUrl(String url) throws MalformedURLException {
|
||||
this.url = new URL(url);
|
||||
}
|
||||
|
||||
public String getTitle() {
|
||||
return title;
|
||||
}
|
||||
|
||||
public void setTitle(String title) {
|
||||
this.title = title;
|
||||
}
|
||||
|
||||
public String getContent() {
|
||||
return content;
|
||||
}
|
||||
|
||||
public void setContent(String content) {
|
||||
this.content = content;
|
||||
}
|
||||
|
||||
public YahooResult(URL url, String title, String content) {
|
||||
setUrl(url);
|
||||
setTitle(title);
|
||||
setContent(content);
|
||||
}
|
||||
|
||||
public YahooResult(String url, String title, String content) throws MalformedURLException {
|
||||
setUrl(url);
|
||||
setTitle(title);
|
||||
setContent(content);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
StringBuilder sb = new StringBuilder();
|
||||
if (title != null) {
|
||||
sb.append(",title=").append(title);
|
||||
}
|
||||
if (url != null) {
|
||||
sb.append(",url=").append(url);
|
||||
}
|
||||
return sb.charAt(0) == ',' ? sb.substring(1) : sb.toString();
|
||||
}
|
||||
}
|
||||
|
||||
public class TestYahooSearch {
|
||||
public static void main(String[] args) throws MalformedURLException, URISyntaxException, IOException {
|
||||
// Create a new search
|
||||
YahooSearch search = new YahooSearch("Rosetta code");
|
||||
// Get the search results
|
||||
List<YahooResult> results = search.search();
|
||||
// Show the search results
|
||||
for (YahooResult result : results) {
|
||||
System.out.println(result.toString());
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue