- Samsung Galaxy Z Fold7 - ezt vártuk, de…
- Yettel topik
- Huawei Watch Fit 5 Pro - jó forma
- Android alkalmazások - szoftver kibeszélő topik
- Huawei Watch Fit 3 - zöldalma
- Honor Magic8 Pro - bevált recept kölcsönvett hozzávalókkal
- Samsung Galaxy S25 Ultra - titán keret, acélos teljesítmény
- Macrodroid
- Milyen okostelefont vegyek?
- Fotók, videók mobillal
-
Fórumok
Mobilarena - mobil fórumok
Okostelefonok Mobiltelefonok Okosórák Autó+mobil Üzlet és Szolgáltatások Mobilalkalmazások Tartozékok, egyebek Mobilarena blogokPROHARDVER! - hardver fórumok
Notebookok TV & Audió Digitális fényképezés Alaplapok, chipsetek, memóriák Processzorok, tuning Hűtés, házak, tápok, modding Videokártyák Monitorok Adattárolás Multimédia, életmód, 3D nyomtatás Tabletek, E-bookok Nyomtatók, szkennerek PC, mini PC, barebone, szerver Beviteli eszközök Egyéb hardverek PROHARDVER! BlogokIT café - infotech fórumok
Infotech Hálózat, szolgáltatók OS, alkalmazások SzoftverfejlesztésGAMEPOD - játék fórumok
PC játékok Konzol játékok MobiljátékokLOGOUT - lépj ki, lépj be!
LOGOUT reakciók Monologoszféra FototrendFÁRADT GŐZ - közösségi tér szinte bármiről
Tudomány, oktatás Sport, életmód, utazás, egészség Kultúra, művészet, média Gazdaság, jog Technika, hobbi, otthon Társadalom, közélet Egyéb Lokál PROHARDVER! interaktív
-
Frissítve: 2014-02-25 10:20 Téma összefoglaló
JavaScript != Java (A JavaScript nem összekeverendő a Javával, két különböző programozási nyelvről van szó!)
Új hozzászólás Aktív témák
-
Doink
aktív tag
Csupán érdeklődésképp, ha már így szóba került...
Pure JavaScriptben van-e coro(utine) függvény? Természetesen nem built-in-re gondolok, hanem bármilyen sajátra. Illetve await és valami executorban futtatásra is kíváncsi vagyok. Bár gondolom az executor veszett ügy, mivel még mindig egy egyszálas, alapvetően böngészőben futó szkriptnyelvről beszélünk. Azt meg nehezen tudom elképzelni, hogy a browser csak úgy engedi a threadek halmozását.
Vannak webworkerek, async és await is.
-
Mr Dini
addikt
Sziasztok!
Egy scrapert faragnék Node-JS-ben, ami a filmezz.eu filmadatbázisát dolgozná fel.
Szeretném majd egy tömbökbe menteni Cheerio segítségével a linkelt oldalról kiparsolt filmcímeket, évszámokat stb., de egyelőre odáig sem jutottam, hogy az első film címét megkapjam... Hogy kéne e helyett megoldani? (a $ egy betöltött Cheerio konstans az oldal forrásával):
title = $('div.container', 'section#filmek.content_box', 'ul.row.list-unstyled.movie-list', 'li.col-md-2.col-sm-3.col-xs-6.no-cover-data'[0], 'a', 'div.cover-element.cover-info', 'span.title').text();Illetve van valami Cheerio nélküli megoldás is arra, hogy a needle-lel leszedett oldal HTMLjében 'ugráljak'? Arra már rájöttem, hogy objektumként is működik a response változó, de a classokat nem tudom hogy kéne neki megadni... Pl. ez rossznak tűnik:
container = response.body.div.container;Köszönöm!

Kis korrekció, mert rájöttem, hogy totálisan nagy hibát követtem el... A Cheerios megoldásom most valahogy így néz ki:
title = $("div.container > section#filmek.content_box > ul.row.list-unstyled.movie-list > li.col-md-2.col-sm-3.col-xs-6.no-cover-data:first > a > div.cover-element.cover-info > span.title").text();Viszont még ez sem működik...

Szerk.: Megvan!

title = $("div.container > #filmek > ul.row.list-unstyled.movie-list > li.col-md-2.col-sm-3.col-xs-6.no-cover-data > a > div.cover-element.cover-info > span.title").text();Viszont a Cheerio nélküli megoldásra még szintén nyitott vagyok!

-
fordfairlane
veterán
Hmmm, forEach, hogy ez nekem miért nem jut sosem eszembe...

Ecmascript 5 óta van. Mondjuk 2009-ben lett belőle szabvány, szóval nem mai gyerek.
Egyidős a beépített JSON objektummal. -
fordfairlane
veterán
Sziasztok!
Van egy zenei API, ami JSON responseokat küld, és ezt szeretném feldolgozni pure-JS segítségével (azaz JQuery stb. nélkül).
Odáig megvan a dolog, hogy a JSON.parse() fügvény segítségével kreálok egy json nevű objektumot, majd a következő módon ki is tudom nyerni az első dal címét:
songTitle = json.collection[0].track.title;
alert(songTitle);Viszont nekem arra lenne szükségem, hogy a címek egy tömbbe kerüljenek.
Ti hogyan oldanátok meg a dolgot?
Köszönöm a válaszokat!

var titles = [];
json.collection.forEach(function(item) {
titles.push(item.track.title);
});
console.log(titles); -
sztanozs
veterán
syntetic sugar:
var DATA = '';
function getPage(url) {
http.request.get(url).then(function (response) {
DATA = response;
console.log(response);
})
}
getPage('http://akarmi/');
while(DATA === '');
alert(DATA);Amúgy nem értem miért nem lehet az egész feldolgozást a then-be rakni, azt kész...
-
fordfairlane
veterán
Még mindig nem értem, miért ilyen elképesztően fontos ez a globális változó, mintha anélkül nem lehetne programot írni.
-
Jim-Y
veterán
-
Jim-Y
veterán
Értem. Szerintem előkeresem a fehér zászlót, mert sajnos azt, amit konkrétan meg szerettem volna csinálni, azt function-ökön keresztül nem lehet megoldani sajnos. Vagy ha igen, akkor számomra csúnyán csak. Azt meg nem szeretném, hogy van egy kód, amit pár hét után előveszek és csak pislogok, hogy mivaaan!?
Php és curl azért nem megoldás, mert ahogy mondtam, ez egy Android/iOS appnak indult, nativescript-tel. Csak, ha ezt tudom, nem szenvedek el feleslegesen két napot a GUI gyártással...
A vége mégiscsak az lesz, hogy java-ban írom meg és csak androidra!

Köszi mindent Nektek, rendkívül tanulságos volt ez a lecke!

Egyetlen egy dolog ami hatraltat teged, hogy foggal korommel ragaszkodsz ahhoz, hogy "fusson le a getPage es az eredmenyt irja bele a DATA valtozoba". Amit nem latsz at, hogy lehet olyan kodot irni, ami az eredmenyt beleirja egy globalis valtozoba, de te azt nem fogod tudni, hogy mikor tortent meg, mert az a valtozoba iras majd valamikor a jovoben fog megtortenni addig a kodod fut tovabb
Szerintem ezt mar nem lehet tovabb ragozni, nem akarsz lathatoan utanaolvasni a dolgoknak, es most felre fogod dobni a nyelvet, mert nem tudsz valamit megcsinalni, sajat hibadbol, mert kb 15perc olvasassal mar vilagos lenne szamodra is, hogy mit hibazol el.
/* 1 */ function getPage(url) {
/* 3 */ http.request.get(url).then(function (response) {
/* 5 */ DATA = response;
/* 6 */ console.log(response);
})
}
/* 2 */ getPage('asd');
/* 4 */ alert(DATA); -
CSorBA
őstag
Köszi!
És ha a
doWhateverYouWantWithHTMLnem function, hanem kód? Mert pont ez a problémám. Nem csak egyszer, egy link esetében szeretném feldolgozni az adatokat, hanem több helyen. Ahol mindegyik linknek más a kódja, tehát másnak kell lefutnia. Amit nem tudok function-be tenni... Konkrétan pl replace-t, vagy splitet szeretnék a változókon végrehajtani.Nem akarom én ezt túlbonyolítani... A lényeg, hogy van egy függvényem, annak küldök egy linket, majd egy DATA változóban visszatér a HTML kódja az adott oldalnak. Erről a HTML oldalról pedig megint leszedek egy link HTML-t, azt is feldolgozom stb...
Ja és van amikor a több link közt case-t is használok, hogy eldöntse a forráskód alapján, hogy éppen melyiket kell használnia... Namost ezt egy functionbe beilleszteni átláthatatlan lenne és újra kéne írnom a már xhr sync-kel működő viszonylag hosszú kódot.
A function is kód.

De sejtem mire gondolsz és akkor valami ilyesmi kell neked:
getPage('http://page1.hu').then((html) => doWhateverYouWantWithPage1(html));
getPage('http://page2.hu').then((html) => doWhateverYouWantWithPage2(html));
getPage('http://page3.hu').then((html) => doWhateverYouWantWithPage3(html));
function doWhateverYouWantWithPage1(html) {
// code1
}
function doWhateverYouWantWithPage2(html) {
// code2
}
function doWhateverYouWantWithPage3(html) {
// code3
}Sokáig lehet ezt ragozni, de más megoldás erre nincs, a JS így működik. És azt is elhiheted, hogy ez a logikus és átlátható mód. Ha nem tetszik, akkor csinálhatod PHP-val és CURL-el mondjuk.
-
CSorBA
őstag
De én pont nem ezt szeretném. A függvény csak "kódrövidítés" szempontjából lenne szükséges. És nem a függvényen belül szeretném az adatokat kiíratni, hanem "kint".
Illetve nem alerteket, hanem elég hosszű replace-ket regex-ekkel használnék...
S ezt a getPage-t én csak a HTML kód leszedésére használnám. Nem egyszer, hanem sokszor a kódban...
Egyébként kinek az ötlete volt egy get kérést aszinkronnak keresztelni? Ott a legtöbb esetben pont az a lényeg, hogy megvárja, míg végez a letöltés... És ez eddig minden programnyelvben, amivel eddig találkoztam mind így volt. De ha callbackkel meg lehet csinálni, kérem valaki dobjon már össze egy példát nekem, ami stimmel a leírásomra! Nagyon hálás lennék!

De a JavaScript nem így működik. A JS egy szálon fut. Ha valami külső dologra (async) kell várnia, akkor nem állhat le. Ugrik a következő sorra. Hát gondolj bele, ha valami hiba történne, vagy lassú lenne a net, akkor addig állna, míg be nem tölt valamit? És az állt úgy kell érteni, hogy addig semmit sem tudsz csinálni. Épp ezért egy ilyen asyncron kérés visszatér egy promissal, ami ha resolválódik. (Teljesül az ígéret) akkor meghívja a jövőben azt a függvényt, ami erre várt.
Az általad hozott példát valahogy így lehetne használni:
function getPage (url) {
'use strct';
return new Promise((resolve, reject) => {
const httpLibrary = url.startsWith('https') ? require('https') : require('http');
httpLibrary.get(url, (response) => {
const body = [];
response.on('data', (chunk) => body.push(chunk));
response.on('end', () => resolve(body.join('')));
}).on('error', (error) => {
console.log('Error!', error.message);
});
});
}
getPage('http://vanenet.hu').then((html) => doWhateverYouWantWithHTML(html));
function doWhateverYouWantWithHTML (html) {
console.log(html);
}A doWhateverYouWantWithHTML-be írod amit szeretnél csinálni, és ez akkor hívódik meg, mikor betöltődött sikeresen a page, amivel meghívtad a getPaget.
Szerk.: De ahogy látom Jim-Y fórumtárs is erre próbált fentebb rávezetni, egy hasonló példával.
Tényleg olvasgass a témában, nem feltétlen egyszerű, de mindenkinél van egy pillanat mikor átkattan és megérti. -
CSorBA
őstag
Egyébként hogy lehet az, hogy a console.log(str); kiírja a HTMl kódot itt, de a DATA globális változóba már nem tudja belementeni?:
var DATA = '';
function getPage(url){
var http = require("http");
content = http.request({ url: url, method: "GET" }).then(function (response) {
str = response.content.toString();
console.log(str);
DATA = str;
}, function (e) {
alert("Error!");
});
}
getPage('http://vanenet.hu');
alert(DATA);Na, itt az utolsó
alert(DATA);már üres...

#6331
Nem, nem használok express-t. Sima nativescript.
Sajnos nem érted, amit itt többen is írtak.
A .then callbackjében lévő rész egész egyszerűen később fut le, mint az alerted. Ezért az alertedben soha sem fogod elérni. Ha csinálnál egy függvényt, amibe berakod az alertet és azt hívod meg a .then callbackjében, akkor már megy, hiszen ez akkor hívódna meg, mikor már az async műveletnek van eredménye.
-
tick
aktív tag
Adatokat szeretnék kinyerni egy HTML kódból, aki dinamikus és egy szerveren futó php rakja össze.
Pl időjárási adatokat szeretnék leszedetni és feldolgozni.
A többit meg már elmondtam. Lehet bármilyen a function, csak getPage('url');-lel lehessen meghívni és a DATA globális változóban adja vissza a html kódot. A kód nár működött xhr-rel, böngészőben, de a node -on nem akar menni a jóöreg xhr.
Feltételezem express-t használsz.
A kódod http kérés utáni részét (res.send-el együtt) mozgasd át a callback functionbe, úgy mennie kéne. -
fordfairlane
veterán
Adatokat szeretnék kinyerni egy HTML kódból, aki dinamikus és egy szerveren futó php rakja össze.
Pl időjárási adatokat szeretnék leszedetni és feldolgozni.
A többit meg már elmondtam. Lehet bármilyen a function, csak getPage('url');-lel lehessen meghívni és a DATA globális változóban adja vissza a html kódot. A kód nár működött xhr-rel, böngészőben, de a node -on nem akar menni a jóöreg xhr.
A http csomag szerintem ebben a formában sohasem fog működni, úgy nézem, egyáltalán nincs szinkron üzemmódja. Vagy használj más csomagot, pl. az említett http-syncet, vagy ne így dolgozd fel a kapott kódot, hanem egy calbackben, vagy promise resolveban.
-
tick
aktív tag
No, akkor másképp közelítem meg a dolgot!
Ma éjfélig kész kell lennem egy mindegy, h milyen, csak működő tákolmánnyal, ami fut androidon appként. A lényeg, hogy működjön, később majd úgyis faragok rajta. Meg egy droid appnál az a kis várakozási idő szerintem amúgy is belefér...
Olvastam valahol, hogy itt is lehet xhr-t használni. Ez érdekelne, de hogyan?
Ha megosztod mit kell csinálni a az appnak, könnyebben tudunk szerintem segíteni hogy kéne kinéznie async felhasználásával

-
dqdb
nagyúr
Azt szeretném elérni, hogy ha bárhol kiadom a kódban a
getPage('http://urlcím');-et, akkor a DATA globális változóban ott legyen az adott oldal forráskódja.Pl xhr, ami régen használtam, viszont gondolom node js-nél a CORS miatt nem megy:
var DATA = '';
function getPage(url){
http = new XMLHttpRequest();
http.open("GET",url, false);
http.send();
DATA = http.responseText;
}Széllel szemben nehéz lesz
![;]](//cdn.rios.hu/dl/s/v1.gif)
Az egész Node.js éppen az aszinkron működésre épít, így minden esetben, amikor nem aktívan dolgozol, hanem valami erőforrásra vagy eseményre vársz, legyen az hálózatról adat lekérése, fájl írása* vagy adatbázis-művelet, mindig egy callbackben kapod meg a végeredményt. Ennek az az oka, hogy a szinkron várakozás blokkol egy feldolgozószálat, és csökken a szerver feldolgozási képessége, míg aszinkron esetben az adott szál lazsálás helyett értelmes munkára is befogható, vagyis egy másik kérés feldolgozására. Most mondhatod, hogy de te ezt nem kérted, azonban azzal, hogy a Node.js alapon álltál neki, pont egy aszinkron, threadpool alapú hatékonyan skálázódó platformra esett a választásod, így vagy megszoksz, vagy megszöksz ...
Kókányolni
szerencséresajnos minden platformon lehet, így itt is, és valószínűleg ezt keresed (nem használtam soha, keresés dobta ki). De itt sem nem véletlenül kezdődik a leírás a Githubon elérhető legnagyobb betűméretű bekezdéssel, hogy miért ne használd ezt a libraryt.viszont gondolom node js-nél a CORS miatt nem megy
A CORS böngésző szintjén értelmezhető csak. A Node.js azért nem támogatja az XHR-t, mert saját API-ja van, nem a böngésző DOM modelljét másolja.* ebből kivételesen létezik szinkron API is, de ennek ellenére a aszinkron felület felé terelnek a hivatalos dokumentációban:
"In busy processes, the programmer is strongly encouraged to use the asynchronous versions of these calls."
-
Jim-Y
veterán
Azt szeretném elérni, hogy ha bárhol kiadom a kódban a
getPage('http://urlcím');-et, akkor a DATA globális változóban ott legyen az adott oldal forráskódja.Pl xhr, ami régen használtam, viszont gondolom node js-nél a CORS miatt nem megy:
var DATA = '';
function getPage(url){
http = new XMLHttpRequest();
http.open("GET",url, false);
http.send();
DATA = http.responseText;
}De ezt nem tudod megcsinalni, mert az asynchronous non-blocking I/O ahogy a javascriptet illetni szoktak lenyege pont az, hogy az async operationok nem blokkoljak a vegrehajtasi szalat. Magyaran, beallithatod te az XHR-t szinkronra, hogy amikor az mondod, hogy getPage(xyz) akkor az eredmeny rogton a DATA-ban legyen, de akkor az egesz javascript/nodejs filozofialval szembe mesz es amugy is ilyet nem csinalunk. Nem veletlenul minden async... Tenyleg javaslom hogy olvasgass kcsit a temaban, mert ugy tunik, hogy nem erted kristaly tisztan hogy hogy is mukodik a javascriptben az async.
Magyarazat:
a getPage belul egy requestet hasznal ami egy http keres lesz egy szerverre, amig erre a http keresre nem erkezik valasz addig NEM SZABAD blokkolni a stacket mert a javascript egy vegrehajtasi szallal (egy stackel) rendelkezik es minden UI is ezen "fut". Ha te egy szinkron kerest csinalsz, mint amit pont most szeretnel elerni akkor egez addig amig a tavoli szerver vissza nem ter addig SEMMIT sem tudnak a felhasznalok csinalni az oldaladon. Mondanom sem kell, hogy ez az egyik legnagyobb antipattern. Helyette aszinkron kell a tavoli szerver kerest kezelni. Vagyis... elinditod a kerest, majd rogton "visszaadod a vezerlest a fo szalnak" persze javascript eseten nincs ertelme ennek a mondatnak de igy konnyebb elkepzelni. Ami tenylegesen tortenik az az hogy amikor elinditasz egy requestet akkor a webapi regisztral egy callbacket amit tcp socket valasz eredmenyevel fog meghivni. Promiszok eseten a callback egy rezolvalt promis lesz.
-
tick
aktív tag
Még így sem megy:
var DATA = '';
function getPage(url){
var http = require("http");
content = http.request({ url: url, method: "GET" }).then(function (response) {
str = response.content.toString();
console.log(str);
DATA = response.content.toString();
}, function (e) {
alert("Error!");
}); return DATA;
}
alert(getPage('http://www.vanenet.hu/'));Egyedül a callbackes megoldásom működik rendesen:
function getPage(callback){
var http = require("http");
content = http.request({ url: URL, method: "GET" }).then(function (response) {
str = response.content.toString();
console.log(str);
callback(str);
}, function (e) {
alert("Error!");
}); return(str);
}
var URL = 'http://www.vanenet.hu';
getPage(function(result){ alert(filmName +result);});Viszont én meg nem szeretném ezzel a function(result)...-tal meghívni a függvényt, hanem annak a helyére a linket szeretném megadni és azt szeretném, ha a DATA változóban lenne a HTML kód.
Egyébként node JS-t használok.
Már a hajam égnek áll ettől!

Ha ez egy játszós project, akkor használhatsz sync megfelelőt, pl http-sync.
Viszont az egész nodeJS lényege hogy non-blocking async. Minden sync function egy pofon a teljesítménynek, ugyanis addig minden más várakozik. -
Jim-Y
veterán
Még így sem megy:
var DATA = '';
function getPage(url){
var http = require("http");
content = http.request({ url: url, method: "GET" }).then(function (response) {
str = response.content.toString();
console.log(str);
DATA = response.content.toString();
}, function (e) {
alert("Error!");
}); return DATA;
}
alert(getPage('http://www.vanenet.hu/'));Egyedül a callbackes megoldásom működik rendesen:
function getPage(callback){
var http = require("http");
content = http.request({ url: URL, method: "GET" }).then(function (response) {
str = response.content.toString();
console.log(str);
callback(str);
}, function (e) {
alert("Error!");
}); return(str);
}
var URL = 'http://www.vanenet.hu';
getPage(function(result){ alert(filmName +result);});Viszont én meg nem szeretném ezzel a function(result)...-tal meghívni a függvényt, hanem annak a helyére a linket szeretném megadni és azt szeretném, ha a DATA változóban lenne a HTML kód.
Egyébként node JS-t használok.
Már a hajam égnek áll ettől!

Szia,
Ami neked kell az, hogy utananezz az aszinkronitasnak es a promisoknak javascriptben, mert igazabol ilyen jellegu a problemad.
Javascriptben a legtobb network hivas aszinkron, vagyis a hivas eredmenye valamilyen jovobeli idopontban lesz csak meg, es mivel a nyelv kornyezete tamogatja az ilyen jellegu hivasokat aszerint is kell kezelni oket. Ennek megkonnyitesere vannak a promisok amiket te mar hasznaltal is a kododban csak valoszinuleg rosszul.
az
alert(getPage(valami))mar csak azert sem mukodhet, mert ezzel a sorral azt feltetelezed, hogy a getPage szinkron fuggveny pedig nem az!Pszeudokod:
function getPage(url) {
return http.request({ url: url, method: "GET" });
}
function yourLogic() {
const URL = 'http://www.vanenet.hu';
getPage(URL)
.then(function (response) { alert(response); })
.catch(function (err) { console.error(err); })
} -
Mr Dini
addikt
Üdv!
Kezdő kérdésem lenne... Mégpedig van egy ilyen functionom:
function getPage(url){
var http = require("http");
content = http.request({ url: url, method: "GET" }).then(function (response) {
var str = response.content.toString();
console.log(str);
}, function (e) {
alert("Error!");
});
}Namost, azt szeretném, hogy ha így meghívom:
alert(getPage('http://bing.com'));akkor térjen vissza az oldal HTML kódjával. Namost, a
console.log(str);miatt megkapom a konzolban a kódot, de nem tudom, hogy kéne a return-t berakni, hogy az alert is kiírja a kódot....
Tudbátok segíteni?
Köszi!

Még így sem megy:
var DATA = '';
function getPage(url){
var http = require("http");
content = http.request({ url: url, method: "GET" }).then(function (response) {
str = response.content.toString();
console.log(str);
DATA = response.content.toString();
}, function (e) {
alert("Error!");
}); return DATA;
}
alert(getPage('http://www.vanenet.hu/'));Egyedül a callbackes megoldásom működik rendesen:
function getPage(callback){
var http = require("http");
content = http.request({ url: URL, method: "GET" }).then(function (response) {
str = response.content.toString();
console.log(str);
callback(str);
}, function (e) {
alert("Error!");
}); return(str);
}
var URL = 'http://www.vanenet.hu';
getPage(function(result){ alert(filmName +result);});Viszont én meg nem szeretném ezzel a function(result)...-tal meghívni a függvényt, hanem annak a helyére a linket szeretném megadni és azt szeretném, ha a DATA változóban lenne a HTML kód.
Egyébként node JS-t használok.
Már a hajam égnek áll ettől!

-
sztanozs
veterán
Debian szerveren nem jött be a regexr chromium alatt, így max jsfiddle-t tudok csatolni. De úgy gondolom, a lényeg ott is látszik. De köszi, elmentettem!
(#6285) sztanozs
Köszi!

Bár ez sem jó, mert a target utáni részt nem szedi ki. Írhatnék .*-ot a target után, de akkor meg csak az első linket adja vissza... :/
Egyébként így néz ki a mostani:
post.replace(/\<a href="(.*?)target/g,"$1");var data = [];
post.replace(/<a[^>]+?href="(.*?)"/gi, function(a,b,c,d) { data.push(b) });
//alert(data); -
sztanozs
veterán
Üdv!
Megint gondba vagyok... Már túlvagyok egy regex tutorialon és a guglin is, nem segített...
Merthogy van egy változóm, ami egy PH! hozzászólás-t tartalmaz HTML-ben.
No, én úgy szeretném replace-lni, hogy csak az <a href=" és target közti részt hagyja meg.
Namost, a problémám az, hogy nem tudom neki megadni, hogy vágja le a targetet és az az utáni részt. Mert a [^target]+ ugye nem működik...
Hogyan lehetne megoldani azt, hogy a végén a változó csak linkeket tartalmazzon és menjen akkor is, ha több link is van a HTML kódban?
Köszi!

Ui.: ha kell, délután csatolok fiddle-t is.
Hali, talán azért, mert a [^target]+ minden olyan több karakterből álló részre keres amiben nincsenek t,a,r,g,e betűk.
Amúgy:<a href="(.*?)target -
martonx
veterán
Üdv!
Megint gondba vagyok... Már túlvagyok egy regex tutorialon és a guglin is, nem segített...
Merthogy van egy változóm, ami egy PH! hozzászólás-t tartalmaz HTML-ben.
No, én úgy szeretném replace-lni, hogy csak az <a href=" és target közti részt hagyja meg.
Namost, a problémám az, hogy nem tudom neki megadni, hogy vágja le a targetet és az az utáni részt. Mert a [^target]+ ugye nem működik...
Hogyan lehetne megoldani azt, hogy a végén a változó csak linkeket tartalmazzon és menjen akkor is, ha több link is van a HTML kódban?
Köszi!

Ui.: ha kell, délután csatolok fiddle-t is.
Nem hiszem el, hogy ennyire nem lehet a megfelelő problémához, megfelelő eszközt használni. Ez esetben ne jsfiddle-t csatolj, hanem regexr példát.
És mire ezt megteszed lehet, hogy sikerül is megoldanod a feladatod.
-
Jim-Y
veterán
Igen, arra gondoltam, hogy a céloldalt kell lennie egy headernek. Ez lehet php kóddal is megoldva.
Esetleg azt lehetne még megcsinálni, hogy egy php kódot felrakok a webszerveremre, amivel beállítom a headert, majd iframeelem a felhőt. Bár ez marha nagy macera lenne (konkrétan az, hogy a js kódnak kellő weblap címet küldjem az iframebe) és nem biztos, h menne is...
Yt alatt igazából pl egy 480-as videó direkt linkig szeretnék eljutni. Ez elvileg benne van a linkem kimenetében, de nekem a kódolás miatt nem sikerült kihámoznom. Konkrét linket nem tudok írni, mert az mindig más...
Pl most találtam egy ilyet [link]. Node-dal futtatva megy is, látom a consolebam a linkeket! De ha mobilon futtatom, ott már nem fut le, debuggolni ott nem tudom, egyetlen esépyem lenne, ha vágnám a kódot és átnézném pl alertekkel, hogy meddig jut el a dolog, de első ránézésre nem sok jött le a kódból. Nekem valami egyszerűbb kéne, functionok nélkül.

Ezt futtasd le és ugy elképzelhető, hogy mobilon is használható lesz. disclaimer: nem teszteltem
-
sztanozs
veterán
Hát ja, csak akkor meg nehézkes lesz megosztani másokkal a kész förtelmes kódot...

Arra gondoltam, hogy ha a kezemben lenne a webtárhely apache konfigja akkor csinálhatnék proxy-t. De sajnos nincsen...
Ps: Youtube resolverhez kéne egy ilyen linkből kinyernem a direkt linket. Van valami megoldás arra, hogy rendesen nézzen ki a fájl és ne ilyen utf-8-as krix-krax legyen? decodeURIComponent nem volt elég...
Sorry a kérdésrohamért, de rájöttem, hogy mindenféle resolver írásával rengeteget lehet tanulni!
Eddig mindegyikre rájöttem és megy, de a Youtube kifogott rajtam és a guglin sem találtam pure js példát rá.Nem hiszem, hogy ez szerver konfigurációban dől el.
A weboldal headerjében kell benne lennie:Access-Control-Allow-Origin "*"Pl php header.
A YT-os kérdésre. Mi lenne a video id, amit ki kellene bányászni?
-
sztanozs
veterán
Ja, most már kezd világos lenni, hogy mit rontok el!
Szóval a szkript lényege, hogy egy adott felhőtárhelyre belép a user adataival és eljut a direkt letöltési linkhez fájlonként. Ehhez parsolnom kell az oldalakat, amihez ugye kellett az xhr. Nade a felhő nem az enyém, és ha jól értem, akkor mindkét oldalra (a JS és a felhő oldalára) kéne egy Access-Control-Allow-Origin: * fejléc (header).
Namost, ezt én nem tudom megengedni magamnak, mivel ugye nincs hozzáférésem a szervereikhez...
Próbáltam így, de nem elég:
var DATA = '';
function getPage(url){
var http = new XMLHttpRequest();
http.open("POST", url, false);
http.setRequestHeader("Access-Control-Allow-Origin","*");
http.send();
DATA = http.responseText;
}És igen, globális változót használok, mivel a változó tartalmára nem csak egyszer van szükség, és így tartottam a legkézenfekvőbbnek.
Más nem használ ilyesmit? Hogy lehetne megkerülni?

-
Mr Dini
addikt
Ismerem a pythonos webszervert. De python 3.x-nél már nem SimpleHTTP.

Na, közben toltam alá egy atw-s webszervert, meg a python webszerverrel is próbáltam, de ezt dobja az FF:
22:07:58.303 Cross-Origin kérés blokkolva: Az azonos eredet házirend nem engedélyezi a távoli erőforrás olvasását innen: http://[...]. (Ok: Az „Access-Control-Allow-Origin” CORS fejléc hiányzik).1(ismeretlen)
Esetleg php-val meg lehetne oldani? Vagy a node js-t tudom futtatni sima apache webszerveren?
#6189
Köszi a példát! Van még mit tanulnom... 
Ja, most már kezd világos lenni, hogy mit rontok el!
Szóval a szkript lényege, hogy egy adott felhőtárhelyre belép a user adataival és eljut a direkt letöltési linkhez fájlonként. Ehhez parsolnom kell az oldalakat, amihez ugye kellett az xhr. Nade a felhő nem az enyém, és ha jól értem, akkor mindkét oldalra (a JS és a felhő oldalára) kéne egy Access-Control-Allow-Origin: * fejléc (header).
Namost, ezt én nem tudom megengedni magamnak, mivel ugye nincs hozzáférésem a szervereikhez...
Próbáltam így, de nem elég:
var DATA = '';
function getPage(url){
var http = new XMLHttpRequest();
http.open("POST", url, false);
http.setRequestHeader("Access-Control-Allow-Origin","*");
http.send();
DATA = http.responseText;
}És igen, globális változót használok, mivel a változó tartalmára nem csak egyszer van szükség, és így tartottam a legkézenfekvőbbnek.
Más nem használ ilyesmit? Hogy lehetne megkerülni?

-
Jim-Y
veterán
Csináltam hozzá egy html részt is, igen. Tehát egy html fájlként, ahol a headben van <script>-ként a JS, majd egy buttonnal futtatom a function-t onClick-kel.
Ja és Firefoxot használtam. Egyébként nekem nagyon tetszik a végeredmény, szóval ha webszerveren is lehetne futtatni, akkor az nagyon jó lenne!
Ezt használom egyébként jelenleg:
var DATA = '';
function getPage(url){
var http = new XMLHttpRequest();
http.open("GET", url, true);
http.send();
DATA = http.responseText;
}Egyebkent irtad hogy a pythonban az a jo, hogy van egy hasznos lib amivel konnyu http requesteket csinalni, es hogy ez js-ben hianyzik. Na ez pl annyira nem igaz, hogy par sornyi kodbol tudsz csinalni egy alkalmazast amiben ennyi a request resz (t.k ugyanaz amit te is mutattal) https://preview.c9users.io/mogyibogyi/promo/client/js/main.js
Az alkalmazas fajljai: https://preview.c9users.io/mogyibogyi/promo/
Demo: https://promo-mogyibogyi.c9users.ioBtw: nyilvan linkelni is lehetett volna egy fetch polyfillt de az too-lame

-
Jim-Y
veterán
Csináltam hozzá egy html részt is, igen. Tehát egy html fájlként, ahol a headben van <script>-ként a JS, majd egy buttonnal futtatom a function-t onClick-kel.
Ja és Firefoxot használtam. Egyébként nekem nagyon tetszik a végeredmény, szóval ha webszerveren is lehetne futtatni, akkor az nagyon jó lenne!
Ezt használom egyébként jelenleg:
var DATA = '';
function getPage(url){
var http = new XMLHttpRequest();
http.open("GET", url, true);
http.send();
DATA = http.responseText;
}Szia, gondoltam, annyi a megoldas, hogy az index.html-t ne csak siman megnyisd a bongeszoben, hanem egy webszerverrel szolgald ki. A legegyszerubb, ha bemesz abba a konyvtarba ahol a fajlod van es
python -m SimpleHTTPServer .Majd a bongeszodben:localhost:8000forras: [link] De akar node-al is siman meg lehet csinalni par sornyi kodbol es ott meg CORS-ot is tudsz allitani ha kene. -
fordfairlane
veterán
Csináltam hozzá egy html részt is, igen. Tehát egy html fájlként, ahol a headben van <script>-ként a JS, majd egy buttonnal futtatom a function-t onClick-kel.
Ja és Firefoxot használtam. Egyébként nekem nagyon tetszik a végeredmény, szóval ha webszerveren is lehetne futtatni, akkor az nagyon jó lenne!
Ezt használom egyébként jelenleg:
var DATA = '';
function getPage(url){
var http = new XMLHttpRequest();
http.open("GET", url, true);
http.send();
DATA = http.responseText;
}A kódodban az XmlHttpRequest objektum open metódusában a harmadik paraméter true. Ez azt eredményezi, hogy aszinkron módban akarod használni. Ilyenkor az utána következő send metódus azonnal visszatér, nem várja meg a szerver válaszát. Vagy használd szinkron üzemmódban, vagy úgy használd, ahogy az én példakódomban.
1. new-val példányosítasz
2. onreadystate-re beállítod, hogy a response-nál mi történjen.
3. open(method, url, async)
4. setRequestHeader, amennyiben szükséges
5. sendÉs ha már functiont használsz, inkább a visszatérésben szerepeljen a responsedata, ne globális változóba tedd.
-
Jim-Y
veterán
Nah, felraktam egy Win-t a harmadik partícióra és megpróbáltam lefuttatni a kódot, de ezt dobja:
17:46:07.717 Cross-Origin kérés blokkolva: Az azonos eredet házirend nem engedélyezi a távoli erőforrás olvasását innen: [...]. (Ok: Az „Access-Control-Allow-Origin” CORS fejléc hiányzik).1(ismeretlen)
Így nem fut le a kód. Sima XMLHttpRequesttel és JQuery get-tel is ezt dobja...

hogy probaltad lefuttatni? megnyitottal egy index.html-t es ugy vagy node?
-
sztanozs
veterán
Sziasztok!
Ismét van egy kis megoldandó problémám... Szóval néhány megosztó ilyesmi formában titkosítja a linkeket a kódban:
eval(function(p,a,c,k,e,r){e=String;if(!''.replace(/^/,String)){while(c--)r[c]=k[c]||c;k=[function(e){return r[e]}];e=function(){return'\\w+'};c=1};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p}('(0(){4 1="5 6 7 8";0 2(3){9(3)}2(1)})();',10,10,'function|b|something|a|var|some|sample|packed|code|alert'.split('|'),0,{}))Nos, nekem ezt pure JS-sel vissza kéne fejtenem. Erre pedig találtam egy ilyen kódot. Ezt megpróbáltam beilleszteni a mostani kódomba, de nem jártam sikerrel, szóval felraktam egy Desktopot a gépre és jsFiddle-n próbálkoztam. Nos ez sem akar sikerülni, de gondolom noob, user error lesz ez is...

Íme a teszt próbálkozás, ami nem működik.
Köszi a válaszokat!

Szerk.: A lényeg az lenne, hogy a gombot megnyomva felugorjon egy alert, a "kicsomagolt" résszel.
Nem escape-eled a stringet (quote és backslash karaktereket), az a baj.
Ráadásul nem is csinálsz semmit a viszzaadott értékkel.Csekkdiszáut: [link]
-
fordfairlane
veterán
-
fordfairlane
veterán
-
Jim-Y
veterán
Ok. Csak egy debian szerver van a gépemen, és ha kellene a böngésző, akkor először be kell rakni a desktopot, majd csak utána másolhatom át telóról gépre a kódot... :/ De az a lényeg, hogy rájöttem magamtól, hogy mi a gond, mire megkérdeztem.

A nulladik elem kihagyása pedig a kezdetektől meg volt oldva.
Azért köszi és teljesen igazad van!

ha csak szervered van terminallal akkor ott a node ahol ki tudod probalni. beirod a kodot egz .js fajlba es
> node test.js -
Sk8erPeter
nagyúr
Ha ahhoz is lusta vagy, hogy a böngészőben kipróbáld némi kiegészítésekkel, akkor miért nem vagy lusta megkérdezni itt a fórumon? SOKKAL tovább tart az egész hozzászólást megírni, mint kipróbálni azt a nyomorék kódot.
Csak saját okulásod céljára kérlek nyomj egy Ctrl+Shift+I-t, kattints a Console tabra, majd dobd be ezt a pici kódot:var storagesArray = ['https://drive.google.com', 'https://dropbox.com'];
var storagesAsString = '';
var i = 0;
for(i = 0; i < storagesArray.length; i++){
storagesAsString += (i + 1) + '.: ' + storagesArray[i] + '\n';
}
alert(storagesAsString);Jé, nahát, működik, gondolom csodát láttál.
Ilyen nagy erőfeszítésekre gondoltam, amikkel akár egyből ki is próbálhatod, mi a búbánattól vérzik el a kódod. Amíg nem tanulsz meg rájönni a saját kódod hibáira, addig programozni sem fogsz megtanulni soha. Mindig mástól várni a segítséget megint csak nem jó út.Ha meg a 0. indexen lévő elemet nem szeretnéd kiíratni, akkor igazítsd hozzá a kódot:
var storagesArray = ['EZ NEM KELL', 'https://drive.google.com', 'https://dropbox.com'];
var storagesAsString = '';
var i = 1;
for(i = 1; i < storagesArray.length; i++){
storagesAsString += i + '.: ' + storagesArray[i] + '\n';
}
alert(storagesAsString); -
fordfairlane
veterán
Egy sima POST request küldése pár sorból megoldható, mindenféle framework nélkül.
var req = new XMLHttpRequest();
req.onreadystatechange = function() {
if (req.readyState == 4 && req.status == 200) {
// Ebben van a valasz: req.responseText;
}
}
req.open("POST", "submithandler.php", true);
req.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
req.send("var1=data1&var2=data2&var3=data3");A Fetch API-val meg még egyszerűbb.
-
martonx
veterán
Miből gondolod, hogy js-el nem lehet post data-t küldeni?
Nem mondom, hogy rossz lenne a python, csak inkább az érveiden mosolygok 
-
Jim-Y
veterán
Miert nem csinaltok pl cordovaval egy kulon alkalmazast erre, miert szenvedtek a taskerrel?
-
Sk8erPeter
nagyúr
Nah, megvan!
Az volt, amit gondoltam. A for előtt létre kell hozni a változót (a StorageList-et), sztringként.

Egyébként direkt kezdődik 1-től az i, mivel a nulladik elem nem egy link, hanem az első link előtti rész. És mivel arra nincs szükségem, így láttam legegyszerűbbnek a 0-ik elem kikerülését.
Mondjuk a length meg asszem mindig 1-gyel többet ad vissza, mivel a nulladikat 1-nek számítja. Szóval lehet, h a for ciklusban a Storages.length-ből kivonok egyet.Köszönöm még egyszer a segítséget!
Az ilyen halál egyszerű kódrészleteket egyébként nyugodtan kipróbálhatnád a fejlesztői panelben is, úgy, hogy bedobod a konzolba, csak alakítsd át egy picit úgy, hogy tesztelhető is legyen. Nyomsz egy Ctrl+Shift+I-t (vagy F12-t), rányomsz a Console fülre, majd bedobod a kódodat. Vagy erre van a jsFiddle, csak akkor is nyisd le a konzolt, hogy lásd az esetleges hibákat, amiket oda dobál ki. Meg hát nyilván ennél kicsit szofisztikáltabb módszerek is léteznek, például valami komolyan vehető fejlesztőkörnyezet használata, JSHint, JSLint, meg egyéb módszerek, amik hozzájárulhatnak a kódod minőségének javításához.
Amúgy igen, inicializálni kell a változódat, mielőtt a nemlétező korábbi értékéhez akarsz hozzáfűzögetni bármit, és ha nem akarsz "Uncaught ReferenceError: <VALAMIVALTOZO> is not defined" jellegű hibákat kapni. Például ezeket a hibákat azonnal láttad volna, ha a konzolba dobálnád be a kódot, vagy abban a környezetben, aminél használod a kódot, kihasználnád a rendelkezésre álló, hasonló jellegű hibakeresési módszereket.
Ezenkívül JavaScriptben nem szokás a változókat nagy kezdőbetűkkel írni.
Plusz ha alert-üzenetbe akarod mindezt kiírni, akkor valami nem stimmel, valószínűleg lenne ennél szebb megoldás (az alert-dialógus elég bénácska és korlátozott, persze tesztelésnek néha elmegy (ha nagyon muszáj), ha nem tudsz épp debuggolni, plusz nem felel meg a console.log, stb.). -
w.miki
veterán
Belenéztem már, de ő is postdata-t küld a lejátszón keresztül.
De szerintem azzal az a gond, h az adf.ly-t nem kezeli le. Bár a functionok számomra logikátlan sorrendben következnek/hívják meg egymást, így nem igazán tudok eg, átfutás után kiigazodni azon a kódon. És még komment se sok van, így max újraírnám a dolgot.
#6161
Igen, én is ezt tettem a sajátomban. De én itt nem látok j.gs kezelést.
eddig lekezelte, nem tudom, mi változott 2 hete, de előtte jó volt
egyébként meg ha kiszeded a film linkjéből, a "http://j.gs/xxxxx" (szám) szöveget, és csak a "http://filmezz"-tól hagyod meg, akkor nem megy az adf.ly-ra
Most csak az indavideos rész jó.
Gondolom a többi function épp az ilyen kattintások miatt van, de... csak tippelgetek...
-
w.miki
veterán
Üdv ismét!
Megint elakadtam a szkriptben, de ez most picit más jellegű, mint az előző probléma. Remélem nem off.
Tehát amin dolgozok, az egy film streamer androidra. A lényege annyi, hogy rákeres a filmre filmezz.eu-n, majd a user kiválaszthatja, hogy honnan streameli a filmezz.eu szerinti szolgáltatók szerint (pl exashare). Na, ez megy, de néhány szolgáltatónál nehéz kinyernem a stream direkt linkjét. Ilyen például a vidto.me, ahol 6 mp-et várni kell, majd egy, button press és utána adja ki a stream urlt. Ezt valahogy JS-sel ki tudom kerülni? Gondolom postdata-t kéne küldeni, de hogy?
Itt egy példa [link].
Vagy pl van a videoget.me, ahol valahogy titkosítva van az url. Pl [link].
Illetve a Cloudzillába tört még bele a bicskám, de ahhoz nem találtam megfelelő linket.
Hogy lehetne kiparsolni az urleket ezekről az oldalakról sima JS-sel?

Ps: a linkek random lettek kiválasztva.
nézz bele a filmezz.eu.zip-be, hátha kapsz ötletet...
vagy megmondod, azzal mi a baj
-
fordfairlane
veterán
Sziasztok!
Egy nagyon egyszerű feladatom lenne, de nem akar összejönni, mert bénázom...

Tehát van egy Storages nevű tömböm, ami URL-eket tartalmaz. Mindegyik tag 1 db-ot és a tagok száma változó. Namost, ezt ki kéne iratnom egy alertbe, egybe az egészet, mégpedig úgy, hogy az url-ek előtt legyen egy szám, majd maga az url, és egy sortörés, majd ismét egy szám, aztán url, sortörés...
Pl:
1 https://drive.google.com
2 https://dropbox.comNah, ezt úgy gondoltam egy mezei for ciklussal meg tudom oldani, de nem megy az a rész, ha már meglévő StoragesList változómhoz hozzáadjam a következő sort.
Ezt próbáltam:
for(i = 1; i <= Storages.length; i++){
StorageList = StorageList+i+' '+Storages[i]+'\n';
}Illetve próbáltam a StorageList = StorageList+i+... helyett a StorageList += i+...-ot is, de nem működött... Tudnátok helpelni?
Köszi! 
<script>
var Storages = ['https://drive.google.com', 'https://dropbox.com'], StorageList = '', i;
for(i = 0; i <= Storages.length - 1; i++){
StorageList += String(i + 1) + ' ' + Storages[i]+'\n';
}
alert(StorageList);
</script> -
Jim-Y
veterán
Nem. Ha ezt a 2 módot használom, akkor nem jut el a kód a végéig (az alertig). Ha =-et teszek oda és nem használom a másik megoldást, akkor megy, de ugye csak az utolsót dobja ki az alert logikusan, hiszen ilyenkor nem hozzáadja, hanem lecseréli.
Lehet, hogy előtte egy var StorageList = '' kéne?
De kipróbálom ezt is, köszönöm!
Szerk.: kipróbáltam, de unexpected token >-ot dob... Ez valami JQuery-s cucc? Mert csak sima JS-em van...

Amit írtam az sima js.
Nem tudsz valami példa kódot feldobni, mert így elég nehéz segíteni :S Egyébként a ciklusváltozód 1-től megy n+1-ig, míg a tömbök nullától vannak indexelve, így az első elemet mindig kihagyod szerintem.
-
Jim-Y
veterán
Sziasztok!
Egy nagyon egyszerű feladatom lenne, de nem akar összejönni, mert bénázom...

Tehát van egy Storages nevű tömböm, ami URL-eket tartalmaz. Mindegyik tag 1 db-ot és a tagok száma változó. Namost, ezt ki kéne iratnom egy alertbe, egybe az egészet, mégpedig úgy, hogy az url-ek előtt legyen egy szám, majd maga az url, és egy sortörés, majd ismét egy szám, aztán url, sortörés...
Pl:
1 https://drive.google.com
2 https://dropbox.comNah, ezt úgy gondoltam egy mezei for ciklussal meg tudom oldani, de nem megy az a rész, ha már meglévő StoragesList változómhoz hozzáadjam a következő sort.
Ezt próbáltam:
for(i = 1; i <= Storages.length; i++){
StorageList = StorageList+i+' '+Storages[i]+'\n';
}Illetve próbáltam a StorageList = StorageList+i+... helyett a StorageList += i+...-ot is, de nem működött... Tudnátok helpelni?
Köszi! 
És mi nem megy benne? Mindig azt írja ki, ha pl Storages 12 elemes, hogy
12 url
12 url
12 url? Ha igen akkor
Storages.forEach((storage, index) => {
StorageList += `${index} ${storage}\n`;
}); -
fordfairlane
veterán
-
fordfairlane
veterán
Szép estét!
Van egy tömböm. Mindegyik tagjának értéke egy https://<urlcim>/<kep>.jpg?<hosszuszamsor> link (ami <>-k között van, az mindig változik (dinamikus)).
Namost, van arra mód, hogy az összes esetben a https://-t lecseréljem http://-re? For-ral egyenként, a szokásos i+1 (amíg az érték kisebb/egyenlő, mint a tömb legutolsó száma) meg tudtam csinálni, de ha van rá gyorsabb megoldás, akkor annak örülnék!

Köszi!
Gyorsabb? Mondjuk ha nem tennéd bele az url-be a https-t, és nem cserélgetnéd. Csak miután kiolvasod a megfelelő értéket a tömbből, akkor fűznéd az image url elejére a megfelelő protokollt.
-
Sk8erPeter
nagyúr
-
Sk8erPeter
nagyúr
Hát igen, vannak benne Taskeres részek is. Ezért sem lenne sok értelme jsfiddle-re feltenni, mert úgyse tud lefutni. Szóval inkább feltettem pastebinre, de ha kell felteszem a fiddlere is.
A változók nevében ne keressetek logikát, hajnalban írtam, szóval nem volt fantáziám agyalni a neveken.
Néhány Tasker specifikus rész értelmezése:
readFile - ahogy a neve is mutatja, ki tud olvasni egy fájlt, amit li lehet menteni változóba
global & setGlobal - a Tasker is tud tárolni változókat, ez azért jó, mert a kód lefutása után is megmaradnak. Illetve ezeket tudom használni más Taskeres projektekben is. A global('változó neve') kiovassa a változó neve változót, míg a setGlobal('változó neve', 'érték') pedig berakja a változónak az értéket/másik változót
convert(változó, "htmlToText") - átalakítja a változóban a html formát, szövegre. Tehát a tageket lecsippenti. Sajnos a hangulatjeleket is, ezért kéne előtte feldolgozni a hangulatjeleket szöveggé.
flash(változó) & flashLong('érték') - kiírja egy androidos Toastba az adott értéket/változót. Hasznos pl debuggolásnál.
És a probléma:
A kódnak azt kéne csinálnia, hogy a Tasker/temp/file.html-ben található utolsó hsz-t és szerzőjét vágja ki. Majd a hangulatjeleket alakítsa át szövegesre, végül pedig alakítsa át szöveges formátumba (tehát a html tagek tűnjenek el) és ha van [ Szerkesztve ] a hsz végén, akkor azt is szedje le. Ez mind megy is szépen, ha a hsz tényleg csak hangulatjeleket tartalmaz. Ha van benne más kép is, akkor a hangulatjel és a kép közti részt kivágja. Ez logikus is, de nekem csak a hangulatjel tagjeit kéne kicserélnem. Van erre valami mód, ahelyett, hogy egyenként lereplace-lem az összes létező hangulatjelet, vagy a mostani "megoldás" helyett?
A smiley kivágására szolgáló reguláris kifejezés így nem jó, túl megengedő, és érthető, hogy kivágja a többi részt is. Le kell szűkítened olyan módon, hogy ténylegesen csak a smiley-kra illeszkedjen, és konkrétan azt a részt szedd ki, ami neked kell, tehát ami az
altattribútumnál meg van adva.Itt van egy példa a smiley-kra szolgáló képre:
<img src="/dl/s/d1.gif" alt=":D">Ebből neked értelemszerűen az
altattribútum értékének megadott:Dkell, idáig Te is eljutottál.Itt egy példa egy jól működő replace-re:
var emoticonImg = '<img src="/dl/s/d1.gif" alt=":D">';
var emoticonText = emoticonImg.replace(/<img src="\/dl\/s\/[^"]+\.gif" alt="([^"]+)">/, "$1");
console.log(emoticonText); // output: :DEzt a reguláris kifejezést persze el kell látnod a megfelelő flagekkel, hogy jól működjön, itt leszűkítettem a lényegre.
Szerk.: a reguláris kifejezésben szereplő
[^"]+azt jelenti, hogy itt egy vagy több olyan karakternek kell szerepelnie, amely nem egyezik az idézőjellel ("). -
martonx
veterán
Hát igen, vannak benne Taskeres részek is. Ezért sem lenne sok értelme jsfiddle-re feltenni, mert úgyse tud lefutni. Szóval inkább feltettem pastebinre, de ha kell felteszem a fiddlere is.
A változók nevében ne keressetek logikát, hajnalban írtam, szóval nem volt fantáziám agyalni a neveken.
Néhány Tasker specifikus rész értelmezése:
readFile - ahogy a neve is mutatja, ki tud olvasni egy fájlt, amit li lehet menteni változóba
global & setGlobal - a Tasker is tud tárolni változókat, ez azért jó, mert a kód lefutása után is megmaradnak. Illetve ezeket tudom használni más Taskeres projektekben is. A global('változó neve') kiovassa a változó neve változót, míg a setGlobal('változó neve', 'érték') pedig berakja a változónak az értéket/másik változót
convert(változó, "htmlToText") - átalakítja a változóban a html formát, szövegre. Tehát a tageket lecsippenti. Sajnos a hangulatjeleket is, ezért kéne előtte feldolgozni a hangulatjeleket szöveggé.
flash(változó) & flashLong('érték') - kiírja egy androidos Toastba az adott értéket/változót. Hasznos pl debuggolásnál.
És a probléma:
A kódnak azt kéne csinálnia, hogy a Tasker/temp/file.html-ben található utolsó hsz-t és szerzőjét vágja ki. Majd a hangulatjeleket alakítsa át szövegesre, végül pedig alakítsa át szöveges formátumba (tehát a html tagek tűnjenek el) és ha van [ Szerkesztve ] a hsz végén, akkor azt is szedje le. Ez mind megy is szépen, ha a hsz tényleg csak hangulatjeleket tartalmaz. Ha van benne más kép is, akkor a hangulatjel és a kép közti részt kivágja. Ez logikus is, de nekem csak a hangulatjel tagjeit kéne kicserélnem. Van erre valami mód, ahelyett, hogy egyenként lereplace-lem az összes létező hangulatjelet, vagy a mostani "megoldás" helyett?
gondoltam fiddlerre csak a lényeget tennéd fel, azaz a var raw = "ide jönne egy jó nagy html string, ami tartalmaz mondjuk pár ph-s hsz-t", és máris futtatható, debugolható lenne a kódod bárhol.
-
martonx
veterán
Talán ha jsfiddle-ben szemléltetnéd a problémád lényegét, akkor lehet lenne valaki aki ránézne. Így most ebből nekem csak annyi jött le, hogy mintha regexp problémád lenne, valami custom cuccal. Így a customsége miatt nem is érdekel tovább a probléma.
-
Mr Dini
addikt
Üdv!
Szeretném, ha kapnék egy értesítést a mobilomra, ha új hszek érkeznek egy adott ph topikba, illetve szeretném ezt egy változóban tárolni, hogy pl widgetbe beágyazható legyen. Ehhez Taskert és egy hányaveti JS kódot fabrikáltam, foggal körömmel.

Ki is tudja írni az utolsó hsz-t, viszont a hangulatjelekkel picit gondban vagyok. Mert htmlben szedem le az oldalt, tehát egy szmájli így néz ki '<img src="/dl/s/.*"/ >'. Természetesen a .* helyén az url, egy üres alt="" és maga a hangulatjel nyersen (pl :)) is megtalálható. Namost, nekem az kéne, hogy ha hangulatjel van a hszben, akkor hagyja meg a nyers formáját, de más képeket ne tüntessen el.
Próbáltam replace-szel, de az ha pl van egy hangulatjel és egy kép a szövegben, akkor a köztes részt is lecsippenti.
Hogy tudnám megoldani?
Köszi!
Ui.: arra gondoltam, hogy search-csel rákeresek az első találatra (n = res.search(/<img src="\/dl\/s\/.*/g);
fn = res.length;
cutres = res.slice(n, fn);
n2 = cutres.search(/ \/>/g+n);) és kivágom valahogy a változóból az n-től n2-ig tartó részt, de erre nem találtam parancsot.Ja és sajnos jQuery-t nem tudok használni, csak sima js-t. A tasker elvileg támogatja, de valamiért nem megy...
1. Sorry, nem válasznak ment...
2. Elírtam, az n2-nél a g+n)
helyett g)+n;-nek kéne lennie.3. Senki?

-
fordfairlane
veterán
Már megoldottam.
Nem. Van egy mappa. Ebben csak képek vannak. A listFiles a Taskerben valami ilyesmit ad vissza:
/Mappa/Kep1.jpg
/Mappa/Kep2.jpg
[…]Na nekem az az ötletem támadt, hogy nyomok egy splittet a \n-re, azaz a sortörésekre és ezt belementem 'i' -be. Ekkor ha pl a /Mappa/Kep1.jpg-t szeretném kiiratni, akkor az i[0] kell nekem. Tehát a tömb nulladik eleme. Namost ennek a tömbnek a lenghtje alapján generáltatok vele egy random számot. (Math.floor) Majd ezt a random számot állítom be háttérnek. Eddig működött a dolog. Viszont azt is szerettem volna, ha az előző háttér tömbbeli értékét ne sorsolja ki még 1x, illetve nulla se legyen az a szám, amit így kapok, erre kellett volna nelem a for. A for azt nézte volna meg, hogy az előzőleg "I" Taskeres globális változóval egyezik-e a most generált szám. Ha igen, akkor addig futtatja, míg más nem lesz a kapott eredmény. Csak közbe rájöttem, hogy az amit összedobtam több sebből vérzik. (Pl a setGlobal a forban
) Ezeket közben kijavítottam és while-ra cseréltem a for-t. Ezt sikerült összehozni, ami működőképesnek látszik:var Hatterek =listFiles("Hatterek", false).split("\n");
var number = Math.floor( Math.random()*(Hatterek.length));
while(number == global('OldScrBcg')) {
var number = Math.floor(Math.random()*(Hatterek.length));
}
while(number == 0) {
var number = Math.floor(Math.random()*(Hatterek.length));
}
setGlobal('OldScrBcg',number);
setWallpaper(Hatterek[number]);1. a var kulcsszót egyszer kell használni a number nevű változó esetében, mondjuk mikor először adsz neki értéket.
2. ha csak egy kép van, a while végtelen ciklust eredményez.
3. Ha number nem lehet nulla, mert a setWallpaper nem nullával indexeli a háttérképeket, akkor egyszerűbb a randomszám generálást úgy megírni, hogy egytől kezdődően dobjon számokat.Math.floor(Math.random() * (max - min)) + min;
azaz jelen esetben
Math.floor(Math.random() * (Hatterek.length - 1)) + 1;
4. Elég a while ciklusban randomszámot generálni, nem kell két Math.random sor.
Szóval ebben a formában valami ilyesmi célszerűbb:
var Hatterek = listFiles("Hatterek", false).split("\n");
var number;
if(Hatterek.length > 1) {
while(number == global('OldScrBcg')) {
number = Math.floor(Math.random() * (Hatterek.length - 1) + 1);
}
} else if(Hatterek.length == 1) {
number = 1;
}
if(number) {
setGlobal('OldScrBcg', number);
setWallpaper(Hatterek[number]);
} -
Sk8erPeter
nagyúr
"Azt szeretném, hogy addig fusson a for loopba, amíg az i értéke I-vel megegyezik."
És ki fogja átállítani azt a mágikus globális I változót?
Igazából egyébként ez a kódrészlet és a feladatspecifikáció teljesen érthetetlen:
"A feladata az, h kiírja a listFiles tartalmát, levágja splittel a sortöréseknél (azaz a következő fájl nevénél) és generál egy random számot, amit utánatesz az 'i' mögé kapcsoszárójelek közt. Azaz a split miatt így tudok hivatkozni a tömbösített változóra. Na szóval értitek...
"
Nem, nem értjük.
Először a splittel készítesz egy tömböt, ez lesz az i változó. Itt gyorsan hozzátenném, hogy leszokhatnál az ilyen teljesen értelmetlen nevű változókról, inkább legyen egy mondatnyi hosszúságú változót, mint egy ilyen értelmetlen fos. Mit jelent az, hogy a tömb után akarsz teni valamit kapcsos zárójelek közt? Úgy érted, hogy a tömb összes stringeleme mögé akarsz fűzni valamit? A tömbbe akarsz bedobni egy újabb változót? Vagy mi a célod?
Mert itt a ciklusok, meg az egész kód ennek fényében tök értelmetlennek tűnik. -
Zedz
addikt
-
Mr Dini
addikt
Húú!
Most látom, h ez úgy rossz, ahogy van!

Na mind1, a lényeg, h a while-lal működik! Köszi srácok!

-
trisztan94
őstag
while ciklus:
while(i != global(I)) {}
Pontosan erre való, bár ritkán használt. Néha még én is elfelejtem, hogy létezik.

-
Zedz
addikt
-
DNReNTi
őstag
Tehát:
Egy baromi egyszerű példa for ciklusra, bár fordfairlane és éppen ezt írta le, csak én áttettem neked gyakorlatba, ez alapján már egész biztosan mennie kell:for(var i = 0, i < 10, i++) {
console.log(i);
} -
Jim-Y
veterán
Szia. Mobilról. Nincs ezzel semmi gond, lehet olyan for ciklust írni ahol az inicializaciot nem a for-ban hanem előtte végzed, illetve a leptetest sem bízod a ciklusra, hanem a torzsben magadtól végzed. Általában ezeket szoktak kihagyni de a kilépési feltételt nem. Bár szerintem meg azt is ki lehet hagyni hisz ott a break. A te esetedben rossz bucketbe került a kilépési feltétel. Udv
-
fordfairlane
veterán
Laikusként használhatnád a for-t úgy, ahogy a specifikációban szerepel.
for([inicializálás], [ciklus feltétel], [ciklus utasítás]) {
utasítás;
}Első ránézésre ez valami überh@xOr for ciklus, amiben nincs se feltételvizsgálat, se léptetés, és emiatt végtelen ciklussá válik.
-
slice14
veterán
-
slice14
veterán
Karma leírta a lényeget.
Ez egy Taskerre készült parser. A taskerben pedig van JSON parse. Egyébként jQuery-t is lehet használni, csak ki kell választani mint plusz library.
A cél a sebesség volt, illetve, h olyan laikusok, mint én is könnyen tudjanak a kódhoz plusz részt írni a későbbiekben, ha szükség lesz rá.
Szerintem ez sikerült hála slice14-nek, Karmának és a többieknek a Js topikból!

Ui.: egyébként amit a rawdata változóba raktál(fájl tartalma) azt a tasker beépített parancsaival egy sorral is meg lehet oldani. ("readFile('xy')")

Itt inkább a probléma a hiányzó adatoknál lehet csak legfeljebb, mert ha nincs adat az adott változóhoz, akkor a változó nevét jeleníti meg a tasker a notifiben, sceneben vagy akár a zooperben. De mivel nem volt ehhez hasonló megoldás a kódban, így marad az if.
Na de nem a hiányzó adat volt a téma.
-
inf3rno
nagyúr
Sziasztok!
Tudom, h az if alap, de én is full alap (kuka) vagyok a témában...

Az lenne a kérdésem, h ifben hogy lehet megadni, h mondjuk akkor fusson le a benne lévő kódrész, ha xy=0, vagy mondjuk yx=0?
Az megvan, h egy változó, meg az "és" is, csak a vagy nincs meg.
Létezik ilyen?

Köszi!

if (xy == 0 || yx == 0)
de ha tudod, hogy csak számok lehetnek, akkor
if (!xy || !yx)
elképzelhető, hogy bináris operátorokkal trükközve még gyorsabb, de ahhoz nem értek, és valszeg neked sem lesz rá soha szükséged, ha webre tákolsz.
-
Karma
félisten
megint! Nem győzök hajlongani! (Már kitörik a hátam
)Bocs, de mint írtam totál noob vagyok ilyen témában. Nem ismerem a parancsokat.
Az én tudományom csak abból áll, h az általatok írt példákban lévő adatokat replacelem... 
Ps: kerekíteni tudok úgy is, hogy .5-nél felfele kerekítsen ha jól értem?
A toFixed(0) automatikusan így csinálja.
-
Karma
félisten
Üdv!
Na, megint elakadtam/unk.

ezek a sorok furcsák:
var Jelenlegifok = Weather.current_observation.temp_c;
var Jelenlegihofok = Jelenlegifok.split('.');Az az érdekes, hogy a fenti kódban az 1 sor lefut, mert ha berakom globalba, látom a változó értékét, de a 2. sor már nem fut le.
És az utána lévő többi dolog sem fut le vmiért. (Mintha a var Jelenlegifok = Weather.current_observation.temp_c; után nem is lenne semmi.A fentebb linkelt jsonban van az adat. (asszem ott pont nincs tizedesjegy, de amúgy így néz ki pl: 15.6 a temp_c) Általában mindig van tizedesjegy amúgy, legalábbis a teszt fájlomban van.
Ja és itt a mostani teljes kód.
Bármilyen ötletet/tippet szívesen fogadok!

P.s.
iztos van hiba a kódban, mert 1 tök amatőr vagyok 2 mobilról írtuk, ezért lehet benne elgépelés. 
A Weather.current_observation.temp_c egy szám, nem string, így nincs is neki split metódusa. Felejtsd már el végre, vedd úgy, hogy nincs is ilyen a nyelvben

Úgy látom, hogy a fok egészrészét próbálod meghatározni, erre használd inkább a toFixed metódust. Ez még kerekít is egy kicsit.
Szóval:
var Jelenlegifok = Weather.current_observation.temp_c;
var Jelenlegihofok = Jelenlegifok.toFixed(0); -
Karma
félisten
Ugyanúgy \-rel kell escape-elni.
Viszont splittel darabolás helyett szerintem megpróbálhatnád a környezettel feldolgoztatni a JSON-t, és a kapott objektumban navigálni.
var Weather = JSON.parse(readFile(...));
setGlobal('%Napfelkel1', Weather.sun_phase.sunrise.hour); -
Mr Dini
addikt
Kedves Hölgyek, Urak
stb! Kedves Fórumtársak!Szóval... Csináltam slice14-el egy Taskeres (ez egy androidos automatizálóapp) xml parsert, aminek feladata leszedni wunderground APIról az aktuális időjárási adatokat.
Kicsit a cucc hosszú lett és elég lassan fut le, ezért elhatároztuk, hogy megcsináljuk JS-ben. (Úgy nézzetek rám, hogy soha nem volt még dolgom JS-el, kivétel egy weboldal és kuka vagyok belőle...
kb annyit tudok róla, hogy nem objektumorientált nyelv...
)Na, szóval elkezdtem a cuccot, de már az elején elakadtam.
Ez a kód:
var Weather = readFile('/sdcard/Tasker/temp/weather.json');
setGlobal('%Weather',Weather);
var Napfelkel1 = Weather.split('sun_phase.sunrise.hour');
setGlobal('%Napfelkel1',Napfelkel1);Elősször is a readFile mögötti json tartalmazza az adatokat. ([link])
A setGlobal azért kell, hogy a változó bekerüljön a Tasker listájába
Eddig minden szuper
és itt akadtam el:var Napfelkel1 = Weather.split('sun_phase.sunrise.hour');
setGlobal('%Napfelkel1',Napfelkel1);Valamiért az kerül a %Napfelkel1-be és a Napfelkel1-be, hogy undefined.

Szerintetek mit rontok el?
Egyáltalán hogyan kell splittelni, vagy kiszűrni az adatot a moon_phase-n és sunrise-on belüli hour-ból?
Ui.: Bocs, ha off, mert Tasker...

Előre is köszönök minden segítséget/tippet/ötletet!

MrDini

Megoldottam!

Mostmár csak az érdekel, h a speciális karakterek elé mit kell rakni, h szövegrészként és ne másként kezelje.
-
Zedz
addikt
Kedves Hölgyek, Urak
stb! Kedves Fórumtársak!Szóval... Csináltam slice14-el egy Taskeres (ez egy androidos automatizálóapp) xml parsert, aminek feladata leszedni wunderground APIról az aktuális időjárási adatokat.
Kicsit a cucc hosszú lett és elég lassan fut le, ezért elhatároztuk, hogy megcsináljuk JS-ben. (Úgy nézzetek rám, hogy soha nem volt még dolgom JS-el, kivétel egy weboldal és kuka vagyok belőle...
kb annyit tudok róla, hogy nem objektumorientált nyelv...
)Na, szóval elkezdtem a cuccot, de már az elején elakadtam.
Ez a kód:
var Weather = readFile('/sdcard/Tasker/temp/weather.json');
setGlobal('%Weather',Weather);
var Napfelkel1 = Weather.split('sun_phase.sunrise.hour');
setGlobal('%Napfelkel1',Napfelkel1);Elősször is a readFile mögötti json tartalmazza az adatokat. ([link])
A setGlobal azért kell, hogy a változó bekerüljön a Tasker listájába
Eddig minden szuper
és itt akadtam el:var Napfelkel1 = Weather.split('sun_phase.sunrise.hour');
setGlobal('%Napfelkel1',Napfelkel1);Valamiért az kerül a %Napfelkel1-be és a Napfelkel1-be, hogy undefined.

Szerintetek mit rontok el?
Egyáltalán hogyan kell splittelni, vagy kiszűrni az adatot a moon_phase-n és sunrise-on belüli hour-ból?
Ui.: Bocs, ha off, mert Tasker...

Előre is köszönök minden segítséget/tippet/ötletet!

MrDini

"kb annyit tudok róla, hogy nem objektumorientált nyelv"
Eeeerm.
Igaz kicsit más, de nem jelenteném ki, hogy nem objektumorientált.
Új hozzászólás Aktív témák
-
Fórumok
Mobilarena - mobil fórumok
Okostelefonok Mobiltelefonok Okosórák Autó+mobil Üzlet és Szolgáltatások Mobilalkalmazások Tartozékok, egyebek Mobilarena blogokPROHARDVER! - hardver fórumok
Notebookok TV & Audió Digitális fényképezés Alaplapok, chipsetek, memóriák Processzorok, tuning Hűtés, házak, tápok, modding Videokártyák Monitorok Adattárolás Multimédia, életmód, 3D nyomtatás Tabletek, E-bookok Nyomtatók, szkennerek PC, mini PC, barebone, szerver Beviteli eszközök Egyéb hardverek PROHARDVER! BlogokIT café - infotech fórumok
Infotech Hálózat, szolgáltatók OS, alkalmazások SzoftverfejlesztésGAMEPOD - játék fórumok
PC játékok Konzol játékok MobiljátékokLOGOUT - lépj ki, lépj be!
LOGOUT reakciók Monologoszféra FototrendFÁRADT GŐZ - közösségi tér szinte bármiről
Tudomány, oktatás Sport, életmód, utazás, egészség Kultúra, művészet, média Gazdaság, jog Technika, hobbi, otthon Társadalom, közélet Egyéb Lokál PROHARDVER! interaktív
- Fokozatosan erősít majd a szerverpiacon az Intel
- Folyószámla, bankszámla, bankváltás, külföldi kártyahasználat
- gban: Ingyen kellene, de tegnapra
- LEGO klub
- Audi, Cupra, Seat, Skoda, Volkswagen topik
- E-book olvasók
- Xbox tulajok OFF topicja
- Battlefield 6
- BestBuy topik
- Háztartási gépek
- További aktív témák...
- ÚJ!!! Starlight MacBook Air 15" M4 24GB 1000GB Garanciával, ajándék töltővel
- Telefon felvásárlás!! iPhone 11/iPhone 11 Pro/iPhone 11 Pro Max
- Dell Precision 7550,15.6",FHD,i7-10850H,16GB DDR4,512GB SSD,Quadro T2000 4GB VGA,WIN11, 2 KAMERA
- Dell Latitude 5410 - 14" FHD touch, Core i5 10310U, 16GB RAM, SSD, jó akku, számla, 6 hó gar
- Asus STRIX RTX 3090 24GB GDDR6X Videokártya! BeszámítOK
Állásajánlatok
Cég: Laptopműhely Bt.
Város: Budapest










![;]](http://cdn.rios.hu/dl/s/v1.gif)



) Ezeket közben kijavítottam és while-ra cseréltem a for-t. Ezt sikerült összehozni, ami működőképesnek látszik:



