praegune kellaaeg 18.06.2025 23:43:54
|
Hinnavaatlus
:: Foorum
:: Uudised
:: Ärifoorumid
:: HV F1 ennustusvõistlus
:: Pangalink
:: Telekavad
:: HV toote otsing
|
|
autor |
|
blinx
HV vaatleja
liitunud: 28.11.2009
|
28.09.2010 12:15:48
|
|
|
Tee väike protokoll raamatute jagamiseks kuu ja maa vahel. Pane sellele nimi. Nii klient kui server on FSM-id. Kirjuta FSM üleminekud üles arusaadavalt.
_________________ 'Just buy everything then you're safe' |
|
tagasi üles |
|
 |
vindi
HV kasutaja
liitunud: 23.01.2003
|
05.10.2010 23:04:58
|
|
|
naisel vaja bakatöö jaoks analüüsida ajalehti.
Kas kellelgi on ideid, kuidas rahvusraamatukogu digitaalsest arhiivist oleks võimalik korraga alla sikutada näiteks kõik Postimehe pdf failid...
Peaksin silmas siinkohal 2006 - 2010 ilmunud lehti.
Lehed ise on on saadaval siin link
Iga ilmunud leht on pdf-ina sealt kättesaadav, jagatuna kolmeks kuni 20ks eraldi failiks. Jube tüütu on neid ka ükshaaval salvestada, eriti arvestades kogu failide mahtu.
Et, ühesõnaga kas on üldse selline programmijupp tehtav, või oleks lihtsam digiarhiiviga ühendust võtta ja neilt lihtsalt paluda neid faile...
|
|
Kommentaarid: 13 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
1 :: |
12 |
|
tagasi üles |
|
 |
Deadlock
Kreisi kasutaja
liitunud: 16.07.2004
|
06.10.2010 17:07:46
|
|
|
Vabalt tehtav. Paned programmi mööda source jooksma ja faile sikutama.
Ainuke jama selles, et xml'is puuduvad seal igasugused id'd, ehk siis pole kergesti parsitav, aga mõne tunniga valmis tehtav.
<a href=avaleht?pid=nlib-digar:1790>
Ma isegi ei teadnud, et lingid ilma jutumärkideta töötavad...
|
|
Kommentaarid: 8 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
8 |
|
tagasi üles |
|
 |
mikk36
HV Guru

liitunud: 21.02.2004
|
06.10.2010 18:05:02
|
|
|
Bluebull, töötavad, jah, aga see leht ei vasta mitte mingitele standarditele seal.
link
|
|
Kommentaarid: 85 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
2 :: |
78 |
|
tagasi üles |
|
 |
Deadlock
Kreisi kasutaja
liitunud: 16.07.2004
|
06.10.2010 20:59:32
|
|
|
Okei, tegin ära.
Download
Tegemist jar failiga ja jooksutamiseks on vajalik Java olemasolu arvutis. Programm pane tööle kuskil omaette folderis, sest sinna hakkab see foldereid tegema kust tööle pannakse.
Probleemiks osutus see, et paljud PDF'id on seal eraldi failidesse jagatud, ehk siis iga lehekülg on eraldi pdf fail, lahendasin asja nii, et programm teeb automaatselt foldereid igale numbrile ja tõmbab järjekorras faile, niikaua kuni tuleb.
Enne otsitakse kogu süsteem läbi ja alles seejärel hakatakse downloadima, seega soovitan ööseks vms tööle panna, kuna ma isegi ei kujuta ette palju neid sealt kokku tuleb. Viitsisin oodata, kuni ta 2000 kokku luges, siis panin kinni. Downloadimist testisin ise manuaalselt linke sisestades.
source:
Spoiler 
import java.awt.Dimension;
import java.awt.GridLayout;
import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
import java.util.LinkedList;
import javax.swing.JFrame;
import javax.swing.JList;
import javax.swing.JScrollPane;
import javax.swing.SwingUtilities;
public class GUI {
JFrame frame = new JFrame();
JList list;
JScrollPane scroll;
LinkedList<String> labels = new LinkedList<String>();
public static void main(String[] args) throws InterruptedException, InvocationTargetException {
SwingUtilities.invokeAndWait(new Runnable(){
@Override
public void run() {
try {
new GUI().init();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
});
}
public void init() throws IOException{
list = new JList();
scroll = new JScrollPane(list);
scroll.setSize(new Dimension(500, 300));
frame.setLayout(new GridLayout(1,0));
frame.setSize(new Dimension(500, 300));
frame.add(scroll);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
frame.pack();
Thread t = new Thread(new MainDownloader(this));
t.start();
}
public void addLabel(String label){
if(labels.size() == 10){
labels.removeLast();
labels.addFirst(label);
}
else labels.addFirst(label);
list.setListData(labels.toArray(new String[labels.size()]));
list.revalidate();
}
}
|
Spoiler 
import java.net.MalformedURLException;
import java.net.URL;
import java.util.LinkedList;
public class URLReader {
private URL current;
private StringBuilder strb;
private LinkedList<URL> list = new LinkedList<URL>();
public void emptyList(){
list.clear();
}
public void setCurrent(URL current){
this.current = current;
}
public URLReader(URL current){
this.current = current;
}
public LinkedList<URL> getURLs(){
return new LinkedList<URL>(list);
}
public String getCurrentPage(){
String str = current.toString();
for(int i = str.length()-1; i > 6; i--){
if(str.charAt(i) == '/') return str.substring(0, i+1);
}
return str;
}
public void parseLine(String line){
strb = new StringBuilder(line);
while(strb.length() > 0){
String str = strb.toString();
if(str.startsWith("<a href=") || str.startsWith("src=") || str.startsWith("http://")){
if(str.startsWith("<a href="))strb.delete(0, 8);
else if(str.startsWith("src="))strb.delete(0, 4);
int end = getMin(strb.indexOf(">"), strb.indexOf("<"), strb.indexOf(" "), strb.indexOf("\""));
try {
if(str.startsWith("http://"))list.add(new URL(strb.substring(0, end)));
else list.add(new URL(getCurrentPage()+strb.substring(0, end)));
} catch (MalformedURLException e) {
e.printStackTrace();
}
strb.delete(0, end);
}
else strb.deleteCharAt(0);
}
}
private int getMin(int ... nums){
int min = Integer.MAX_VALUE;
for(int i = 0; i < nums.length; i++){
if(nums[i]<min && nums[i] >= 0) min = nums[i];
}
return min;
}
}
|
Spoiler 
import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.URL;
import java.util.LinkedList;
public class MainDownloader implements Runnable{
private LinkedList<URL> streams = new LinkedList<URL>();
private LinkedList<URL> dirs = new LinkedList<URL>();
private GUI gui;
public MainDownloader(GUI gui){
this.gui = gui;
}
public void work() throws IOException {
// starts: http://digar.nlib.ee/otsing/?pid=nlib-digar:905&show
URL url = new URL("http://digar.nlib.ee/otsing/?pid=nlib-digar:905&show");
URLReader reader = new URLReader(url);
dirs.add(url);
int counter = 1;
while(!dirs.isEmpty()){
try{
url = dirs.removeFirst();
BufferedReader input = new BufferedReader(new InputStreamReader(url.openStream()));
reader.setCurrent(url);
reader.emptyList();
String str;
while((str = input.readLine()) != null){
reader.parseLine(str);
}
for(URL u : reader.getURLs()){
if(u.toString().contains("nlib-digar")){
if(u.toString().contains("stream?")){
streams.add(u);
gui.addLabel("Stream found: "+u);
}
else dirs.add(u);
}
}
gui.addLabel("Page "+(counter++)+" checked. Pages remaining: "+dirs.size());
} catch(Exception e){
gui.addLabel("Critical Exception occured. Something was lost.");
}
}
gui.addLabel("STARTING DOWNLOADING!");
String curDir = System.getProperty("user.dir");
while(!streams.isEmpty()){
try{
boolean continues = true;
int i = 1;
url = streams.removeFirst();
String strurl = url.toString().substring(0, url.toString().length()-1);
String folderName = folderName(url);
File folder = new File(curDir+"/"+folderName);
folder.mkdir();
while(continues){
url = new URL(strurl+i);
continues = FileDownloader.download(url, new File(folder, i+".pdf"));
gui.addLabel("DONE: "+new File(folder, i+".pdf"));
i++;
}
} catch(Exception e){
gui.addLabel("Critical exception occured. Something was lost");
}
}
}
public static String folderName(URL url){
String str = url.toString();
int start = str.indexOf("digar:")+6;
int end = str.indexOf("&file_id");
return str.substring(start, end);
}
@Override
public void run() {
try {
work();
} catch (IOException e) {
e.printStackTrace();
}
}
}
|
Spoiler 
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
/**
* FileDownloaderImpl
*
*
*/
public class FileDownloader extends BufferedCopyProgram{
public static boolean download(URL url, File dest) throws IOException {
InputStream in = url.openStream();
if(in.available() < 30) return false;
copy(in, new FileOutputStream(dest));
return true;
}
}
|
Spoiler 
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
/**
* BufferedCopyProgram
*
*
*/
public class BufferedCopyProgram{
public static void copy(InputStream src, OutputStream dest) throws IOException {
BufferedInputStream input = new BufferedInputStream(src);
BufferedOutputStream output = new BufferedOutputStream(dest);
int b;
while((b = input.read())!=-1){
output.write(b);
}
input.close();
output.close();
}
}
|
|
|
Kommentaarid: 8 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
8 |
|
tagasi üles |
|
 |
vindi
HV kasutaja
liitunud: 23.01.2003
|
08.10.2010 07:59:20
|
|
|
vau... suurepärane.
Aga samas, katsetasin täna õhtul järgi.
Jätsin mitmeks tunniks tööle, kuid kätte oli ta selle ajaga saanud umbes 15 päeva 2006 aasta juunist.
Samas need viisteist päeva olid ka juba 1,2gb
Arvestan nüüd suurema mahuga ja proovime korra veel.
edit: nüüd, hommikuks asi ikka veel jooksis, 10gb oli kella 7:30ks olemas ning tiksus vaikselt edasi
|
|
Kommentaarid: 13 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
1 :: |
12 |
|
tagasi üles |
|
 |
Deadlock
Kreisi kasutaja
liitunud: 16.07.2004
|
08.10.2010 20:55:52
|
|
|
Meeldiv, kui abi on. Anna teada, kui tõmmatud saad
_________________ "Believe you can, believe you can't; either way, you're right." - Henry Ford |
|
Kommentaarid: 8 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
8 |
|
tagasi üles |
|
 |
|
lisa lemmikuks |
|
|
sa ei või postitada uusi teemasid siia foorumisse sa ei või vastata selle foorumi teemadele sa ei või muuta oma postitusi selles foorumis sa ei või kustutada oma postitusi selles foorumis sa ei või vastata küsitlustele selles foorumis sa ei saa lisada manuseid selles foorumis sa võid manuseid alla laadida selles foorumis
|
|
Hinnavaatlus ei vastuta foorumis tehtud postituste eest.
|