Fórum Root.cz
Hlavní témata => Vývoj => Téma založeno: free 03. 12. 2013, 11:01:48
-
Dobrý den,
snažím se z webu stahovat obrázky, pomocí Javy, už jsem pár takových programů udělal a fungovaly výborně, ale narazil jsem na problém, kdy se mi nepodařilo ze zadaného URL obrázek uložit, když URL je funkční. Proměnná image po inicializaci vrací null, proto se obrýzek neuloží. S jinýmy url to funguje. Poradíte mi prosím. PS: Obsah URL je od 18+ Takže pozor!!!
BufferedImage image = null;
URL url=null;
image = ImageIO.read("http://www.amateri.cz/orig.php?&img=6/2/7/4/g996021/7895007.jpg");
ImageIO.write(image,"jpg", new File("D:\\pokus.jpg");
-
Asi bych ti neměl radit, ale jsi si jistý, že odkaz vede na obrázek?
-
<body style="overflow:auto" leftmargin="0" topmargin="0">
<script> … </script>
<div id="" style="width: 4000px; height: 3000px; background-image: url("http://img2.amateri.cz/users/6/2/7/4/g996021/7895007.jpg");">
<img width="4000" height="3000" alt="KliknutÃm na obrázek zavÅete okno." onclick="window.close()" src="://img2.amateri.cz/obr/b.gif"></img>
</div>
-
a co si to zkusit ?? Když už jse těch stahovačů tolik napsal ....
$ telnet www.amateri.cz http
Trying 80.250.12.206...
Connected to www.amateri.cz.
Escape character is '^]'.
GET http://www.amateri.cz/orig.php?&img=6/2/7/4/g996021/7895007.jpg HTTP/1.1
host:www.amateri.cz
HTTP/1.1 200 OK
Server: nginx
Date: Tue, 03 Dec 2013 10:53:45 GMT
Content-Type: text/html
Content-Length: 2843
Connection: keep-alive
Keep-Alive: timeout=10
X-Powered-By: PHP/5.2.12
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<script type="text/javascript">var NREUMQ=NREUMQ||[];NREUMQ.push(["mark","firstbyte",new Date().getTime()]);</script><title>Amateri.cz - originální velikost obrázku</title>
</head>
<body topmargin=0 leftmargin=0 style="overflow:auto">
<SCRIPT>
<!--
var a='';var b='%rt2c/602%2cn%2%3223%Av%23nEg%/te47gnno%c9lrd%n%r%9nln2 22irsg92%ec2o2%o2Dt0C0e.sd/ C%%a//2.a2%%o8s2halA0zC02%2 0hmi/9523rlws23r2%%n3zt%so% mDAas//pie0D.2yuntkmbk%kc2% stg.690%D%iie%D%%2Ca%ae2%w3 3cp.z207022kd202A0K%21%2%D% i33mu71jlc23w%tcaliDoe5o022 %2/er/8%gtn2l%es%3u2%29oao0 ';var c='0738519246';for(var i=0;i<28;i++) for(var j=0;j<10;j++) a+=b.charAt((parseInt(c.charAt(j))*28)+i);document.writeln(unescape(a));
-->
</SCRIPT>
<NOSCRIPT>
<I>[Please Enable JavaScript]</I>
</NOSCRIPT>
<script><!--
a='';b='';
--></script>
<script type="text/javascript">
function imgprotect(theClass){
var h,w,src;
var allHTMLTags=document.getElementsByTagName('*');
for (var i=0; i<allHTMLTags.length; i++) {
if (allHTMLTags[i].className==theClass) {
allHTMLTags[i].onload=imgprotect_process;
allHTMLTags[i].oncontextmenu=function () {return false;};
}
}
}
function imgprotect_process(){
var co=this;
if(!co.parentNode || co.tagName!='IMG'){
return;
}
var img=new Image(); //ie bug
img.src=co.src;
var DIV=document.createElement("div");
DIV.style.width=img.width+'px';
DIV.style.height=img.height+'px';
DIV.style.border=co.style.border;
DIV.style.margin=co.style.margin;
DIV.id=co.id;
DIV.style.backgroundImage="url("+co.src+")";
DIV.innerHTML="<img src='http://img2.amateri.cz/obr/b.gif' height='"+img.height+"' width='"+img.width+"' onclick='window.close()' alt='"+co.alt+"'/>"
co.parentNode.replaceChild(DIV,co);
}
imgprotect('nodown');
var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
</script>
<script type="text/javascript">
var pageTracker = _gat._getTracker("UA-1475151-1");
pageTracker._initData();
pageTracker._trackPageview();
</script>
<script type="text/javascript">if(!NREUMQ.f){NREUMQ.f=function(){NREUMQ.push(["load",new Date().getTime()]);var e=document.createElement("script");e.type="text/javascript";e.src=(("http:"===document.location.protocol)?"http:":"https:")+"//"+"js-agent.newrelic.com/nr-100.js";document.body.appendChild(e);if(NREUMQ.a)NREUMQ.a();};NREUMQ.a=window.onload;window.onload=NREUMQ.f;};NREUMQ.push(["nrfj","beacon-2.newrelic.com","edf520cf2e","2561551","ZFQGYUpWXhYDUEYPDl0eMUdRGF8XC1QcFglD",0,1,new Date().getTime(),"","","","",""]);</script></body>
</html>
Connection closed by foreign host.
-
Zas... javascript, když to zobrazím v prohlížeči a dám zobrazit HTML tak tam je odkaz výs. výše, ale když stahnu html kod pomocí mé aplikace tak tam je kod ale nejsou tam spuštěné javascripty, proto tam nemám ani url na ten obrázak.... Jak to obejít???
PS: neříkal jsem že jsem odborník na stahovače, jen že jsem jich pár napsal a +/- fungovaly, akorát s tak složitýma stránkama jsem se ještě nestkal, ale chci to nějk vyřešit.... Díky všem za rady
-
Pozor na thread safety s ImageIO.
URL url = new URL("http://img2.amateri.cz/users/6/2/7/4/g996021/7895007.jpg");
ReadableByteChannel rbc = Channels.newChannel(url.openStream());
FileOutputStream fos = new FileOutputStream("pokus.jpg");
fos.getChannel().transferFrom(rbc, 0, Long.MAX_VALUE);
-
Ještě by mě zajímalo jak dostat url adresu obrázku ze stránky pomocí javy. Jak sje mse díval na zdrojík tak je to generované javaskriptem. Dá se to nějak obejít?
-
Pokud stránka funguje v Internet Exploreru, tak tam se dá dostat pomocí ActiveX a dá se přímo šťourat v elementech stránky, pochopitelně i v těch vygenerovaných javascriptem. Princip je tedy takový, že javascript si spustíš u sebe a vezmeš si výsledky.
Není to ale na tři řádky, spíše tak na tři dny práce.
-
Nedalo by se něco takového udělat pro linux? Přímo jak stahuju to thml aby se to stáhlo i s hotovými javascripty
-
Myslim, ze patrate po tomto: https://developer.mozilla.org/en-US/docs/Rhino
-
Pomocou html parsera napr. http://jsoup.org/
-
webkit jen jestli je pro javu.
-
Tak nemusí to být přímo java.
-
Já bych začal u toho proč chcete krást obrázky?
-
Když odhlédnu od toho, proč ty obrázky krást, tak se ptám, proč tak složitě? Interpretovat javascript je zbytečný.
Očividně můžete stáhnout tu stránku, kde je ten javascript. Na té jde najít tu antidownload děsně složitou ochranu.
<SCRIPT>
<!--
var a='';var b='%rt2c/602%2cn%2%3223%Av%23nEg%/te47gnno%c9lrd%n%r%9nln2 22irsg92%ec2o2%o2Dt0C0e.sd/ C%%a//2.a2%%o8s2halA0zC02%2 0hmi/9523rlws23r2%%n3zt%so% mDAas//pie0D.2yuntkmbk%kc2% stg.690%D%iie%D%%2Ca%ae2%w3 3cp.z207022kd202A0K%21%2%D% i33mu71jlc23w%tcaliDoe5o022 %2/er/8%gtn2l%es%3u2%29oao0 ';var c='0738519246';for(var i=0;i<28;i++) for(var j=0;j<10;j++) a+=b.charAt((parseInt(c.charAt(j))*28)+i);document.writeln(unescape(a));
-->
Z tý si odchytím proměnou "b", což zvládne určitě i jednoduchá operace s řetězci. Pak teda v tý javě implementuju tenhle děsně složitej kód:
var a=""
for(var i=0;i<28;i++) {
for(var j=0;j<10;j++) {
a+=b.charAt((parseInt(c.charAt(j))*28)+i);
}
}
document.writeln(unescape(a));
Tím, když proženu "b", tak mi to vyplivne následující:
<img class="nodown" alt="KliknutÃm na obrázek zavÅete okno." style="cursor:hand" onclick="window.close()" aling="center" src="http://img2.amateri.cz/users/6/2/7/4/g996021/7895007.jpg">
Vezmu tu část ze src a mám ten finální link, kterej můžu stahovat, jak se mi líbí...
-
Jo ještě jsem přehlídl, že kromě "b" musím z té stránky přečíst ještě "c", ale né, že by to kvůli tomu bylo složitější...:)
-
none_ ma pravdu ;D