Merhaba,
Öncelikle JSoup'tan bahsetmek gerekirse;
Jsoup, Java programlama diline ait açık kaynak kodlu bir html parser kütüphanesidir.
GoogleChart ise Google'ın hazırlamış olduğu ve ücretsiz sunduğu grafik kütüphanesidir.
MapBean.java
/**
*
* @author Omer Faruk KURT
*/
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import javax.annotation.PostConstruct;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
@ManagedBean(name = "mapBean")
@SessionScoped
public class MapBean implements Serializable {
/**
*
*/
private static final long serialVersionUID = 89459996582054769L;
private List<MapClass> mapList;
@PostConstruct
public void init() {
calistir();
}
public List<MapClass> getMapList() {
return mapList;
}
public void setMapList(List<MapClass> mapList) {
this.mapList = mapList;
}
public void calistir() {
try {
Document doc = Jsoup.connect("http://www.nufusu.com").get();
Element table = doc.select("table").get(2); //select the first table.
Elements rows = table.select("tr");
mapList = new ArrayList<>();
for (int i = 1; i < rows.size(); i++) { //first row is the col names so skip it.
Element row = rows.get(i);
Elements cols = row.select("td");
/**
* baş harfi İ olanları I olarak degistir. Bunun sebebi ise
* GeoChart Istanbul ve Izmir olarak tanimaktadir.
*/
if (cols.get(1).text().startsWith("İ")) {
cols.get(1).text(cols.get(1).text().replace("İ", "I"));
}
/**
* Mersin'i Icel olarak degistir. Bunun sebebi ise GeoChart
* Mersin'i tanimiyor.
*/
if (cols.get(1).text().equals("Mersin")) {
cols.get(1).text("Içel");
}
/**
* Afyon ile baslayani Afyon olarak degistir.
* http://www.nufusu.com adresinde Afyonkarahisar olarak gelen
* veriyi GeoChart tanimiyor.
*/
if (cols.get(1).text().startsWith("Afyon")) {
cols.get(1).text("Afyon");
}
/**
* Replace yapmamizin amaci noktali sayi degerlerini duz hale
* cevirmek. Bu da yine GeoChart'in istedigi sekil
*/
mapList.add(new MapClass(cols.get(1).text(), cols.get(4).text().replace(".", "")));
}
setMapList(mapList);
} catch (Exception e) {
e.printStackTrace();
}
}
}
MapClass.java
/**
*
* @author Omer Faruk KURT
*/
public class MapClass {
private String country;
private String count;
public MapClass(String country, String count) {
this.country = country;
this.count = count;
}
public String getCountry() {
return country;
}
public void setCountry(String country) {
this.country = country;
}
public String getCount() {
return count;
}
public void setCount(String count) {
this.count = count;
}
}
index.xhtml
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:p="http://primefaces.org/ui"
xmlns:c="http://java.sun.com/jsp/jstl/core">
<h:head><title>PrimeFaces Test</title>
<script type='text/javascript' src='https://www.google.com/jsapi'></script>
<script type='text/javascript'>
google.load('visualization', '1', {'packages': ['geochart']});
google.setOnLoadCallback(drawRegionsMap);
function drawRegionsMap() {
var data = google.visualization.arrayToDataTable([
['Şehir', 'Nüfus'],
< c:forEach var = "resultAnalysis" items = "${mapBean.mapList}" >
['${resultAnalysis.country}',${resultAnalysis.count}],
< /c:forEach>
]);
var options = {};
var opts = {
region: 'TR',
displayMode: 'regions',
resolution: 'provinces'
};
var chart = new google.visualization.GeoChart(document.getElementById('chart_div'));
chart.draw(data, opts);
}
;
</script>
</h:head>
<h:body>
<div id="chart_div" style="width: 1200px; height: 800px;margin: 0 auto;"></div>
</h:body>
</html>
Kaynak kodları
Demo
http://demo-kurtomerfaruk.rhcloud.com/Demo/jsoupgchart.xhtml
Sorunsuz javalı günler


0 Yorumlar