PDA

Visualizza versione completa : Java Userscript per modificare la url di un sito



DeST
11-03-18, 13: 10
Salve a tutti ragazzi,
è un bel po che non scrivo per le troppe faccende, oggi volevo chiedere il vostro aiuto nella correzione di un userscrip per Tapermonkey dato che io non so affatto programmare e questa volte Mr. Google non mi ha fatto il miracolo.

Devo fare in modo di modificare questi link che visito da un rss e che il gestore del sito non sembra voler sistemare:
Il link ha questa forma:

https://www.dominio.prova.it/categoria/classe/codice1/avvisi/'http://www.dominio.prova.it'/codice1/'http://www.dominio.prova.it'/codice1/avvisi/codice2

E vorrei che il broser lo aprisse in questa forma:

https://www.dominio.prova.it/#!/articolo/codice1/avviso/codice2

Ho provato cercando su internet a capirci qualcosa, cosa in cui non sono proprio riuscito ed ecco il disatro che ne è venuto fuori (abbiate pazienza l'unica cosa che abbia mai programmato è la sveglia vicino al letto)

Only registered members can view code.

Dopo diversi tentativi nel capire il codice per sistemarlo mi sono arreso e mi chieidevo se magari qualcuno che sa programmare perdesse 10 secondi a creare un codice che funzioni, grazie infinite

Andy86
11-03-18, 14: 07
:bai

Puoi controllare se il forum non ti ha cambiato i link? Perché il primo mi sembra un po' "confuso"... :ohoh

Casomai dopo la correzione togli la spunta a "analizza automaticamente i collegamenti nel testo" nella modalità avanzata.

DeST
11-03-18, 15: 42
Nono gli indirizzi sono proprio come da esempio... purtroppo

Andy86
11-03-18, 16: 26
:shock

Prova così:


Only registered members can view code.

Ho cambiato metodo di "get" perché così mi sembra un attimino più leggibile (e facile da modificare). :bgg2

Se per caso l'uso di evaluate fosse un requisito di tapemonkey, tieni buona l'espressione regolare.

DeST
11-03-18, 17: 55
umm
il window.location.replace (links); ci va sempre alla fine giusto?
Perchè fa refresh infiniti ma non succede nulla

nel compplesso è così

Only registered members can view code.

Andy86
11-03-18, 18: 59
A parte che nell'originale non l'avevi messo, comunque mi pare che il window.location.replace non c'entri niente, quello sostituisce il contenuto dell'intera pagina con quello dato in parametro.

La sostituzione viene già fatta dall'assegnazione di links.item(i).href che punta direttamente all'elemento corrispondente nel codice della pagina.

Prova a toglierlo.

DeST
11-03-18, 19: 24
Ops allora lo avevo aggiunto dopo la richiesta d'aiuto...
Levandolo non succede assolutamente nulla apro il link dal feed e resta la pagina di errore relativa all'indirizzo url "incasinato", come se non esistesse insomma :cry3

Andy86
12-03-18, 10: 27
:bai

Sono riuscito a provare lo script con greasemonkey, a me lo script parte, l'ho provato con duckduckgo (cambiando l'espressione nel replace) e ha modificato i link nella home:

3756


Prova a metterci un:


Only registered members can view code.

Così vediamo se lo script parte ma non va bene la regexp, oppure se non lo esegue proprio.

DeST
12-03-18, 17: 01
ho inserito nell'ultima riga dello script l'alert e quando apro un link di quel tipo esce la scritta hello world... credo che quindi sia un problema della regexp
Potrebbe dipendere dal fatto che nell'indirizzo codice1 sono 54 caratteri alfanumerici? Sarà troppo lungo?

Andy86
12-03-18, 18: 05
No, aspetta... quando "apri" il link?

Ma tu stai cercando di modificare il link quando è nella pagina o quando lo apri?

Perché lo script così impostato modifica tutti i link presenti nel codice html della pagina, quindi, come nel mio esempio con duckduckgo, tu apri una pagina contenente i link e vedi i link corretti al posto di quelli originali.

Se i feed su cui clicchi sono in una pagina del sito pinco.palla.it, e poi solo i link rimandano a dominio.prova.it, allora devi impostare lo script per attivarsi (includere) sul dominio pinco.palla.it, in modo che nella pagina vedi già le url corrette.

Se invece stai cercando di modificare l'url della pagina aperta bisogna fare diversamente.

DeST
12-03-18, 18: 16
Ah ecco forse è questo il problema, quindi per far funzionare questo script dovrei fare in modo che si attivi nella pagina del feed rss così che vada a modificare i link nel feed stesso... Solo che usando un aggregatore (Feedly) e i segnalibri live di firefox non so se la cosa così possa funzionare, su @include dovrei inserire https://feedly.com* ?

Avevo trovato un regex tester e sembrava tutto in regola con il codice
https://regex101.com/r/7UbpGN/2

EDIT: ho provato a inserire
// @include *://feedly.com/*
si attiva in feedly lo script ma i link restano uguali
Volendo agire sull'url della singola pagina aperta diventa più complicata la questione?

Grazie comunque per la rottura che ti sto dando, credevo fosse più immediata la cosa

Andy86
12-03-18, 18: 27
Si, per modificare i link dentro il feed devi includere il dominio dell'aggregatore, che deve appunto un web-aggregatore in modo che lo vedi dentro firefox, e così quando passi sul link lo vedi modificato.

Altrimenti per modificare il link quando ci clicchi sopra puoi fare così:


Only registered members can view code.

In questo caso includi come pagina il dominio prova.it, quando clicchi sul link sbagliato (ma con il dominio giusto) si attiva lo script e ti ridireziona sul link corretto.

RE-EDIT:


Volendo agire sull'url della singola pagina aperta diventa più complicata la questione?

Grazie comunque per la rottura che ti sto dando, credevo fosse più immediata la cosa

Il codice che ho inserito sopra è esattamente la risposta a questa domanda.

E di niente, tranquillo. Io mi diverto pure. E intanto faccio un po' di esperienza con il web-script. :bgg2

DeST
12-03-18, 18: 32
Scusami dovrebbe essere così giusto? Perchè mi ritornano i refresh infiniti se apro il link così


Only registered members can view code.

Andy86
12-03-18, 19: 38
Acc... è vero. Ti ritornano i refresh infiniti perché il dominio è sempre quello e lo script si attiva ogni volta... avrei dovuto pensarci subito. :ehmm

Allora... proviamo così:


Only registered members can view code.

In pratica esegue il redirect solo se il link attuale contiene "avvisi", nel link corretto "avvisi" non c'è più (c'è avviso) quindi lo script si ferma.

Questo per dire che se dovessi riadattare lo script ad altri link dovresti riadattare anche tale sottostringa per controllare se il link è già stato corretto.

DeST
12-03-18, 23: 32
Bhe il refresh infinito effettivamente non lo fa, fa un solo refresh senza però cambiare nulla... solito link incasinato :ohoh

Andy86
13-03-18, 10: 40
Uff... allora dobbiamo controllare la regexp.

Sicuro che il link dell'esempio sia esattamente come quello incasinato?

E che tutti i link siano incasinati esattamente secondo lo stesso schema?

DeST
13-03-18, 11: 09
Sisi, ho controllato più volte anche con regex tester (ma posso pubblicare i link veri o va contro regole del forum?), unica cosa quando vado a copiaincollare l'url in un blocco note dove sono gli apostrofi me li riporta come %27
La sostituzione delle parole del link la faccio con il blocco note e la funzione sostituisci parola, proprio per evitare di fare errori

A questo punto potrebbe tornare utile fornire più dettagli, riporto come si presenta l'indirizzo del feed e il codice di un elemento del feed, dove tra l'altro non vedo quel link strano ma magari permette di capire se deve essere modificato il regex


Only registered members can view code.

Andy86
13-03-18, 11: 21
A proposito, non è che hai impostato il browser per bloccare i redirect?

Scusa, ma quel codice che hai postato non ho capito cos'è... fa parte dell'aggregatore di feed?
Perché vedo il link già corretto... :m:

Per il regolamento (https://www.collectiontricks.it/threads/342-Regolamento-Generale) (punto 2) dovrebbe essere ammissibile, sempre che tu voglia farci vedere che siti visiti. :bgg2

DeST
13-03-18, 11: 47
No non ho mai impostato alcun blocco ai redirect, quel codice l'ho preso dal feed rss originale visualizzandone la sorgente in firefox ed estraendo il codice di un solo elemento del feed. Notavo anch'io che l'indirizzo compreso in <link></link> è diverso da quello che va ad aprire realmente, in ogni caso non funziona neanche quello nel codice, saranno quei maledetti apostrofi ad aver incasinato tutto?

Andy86
13-03-18, 13: 13
Non sono sicuro nemmeno io della correttezza dell'apostrofo in quella posizione, però sai cosa? Quello non è un link cliccabile, è più una specie di include (I link cliccabili si fanno con il tag <a>), quindi evidentemente il codice che contiene il link sbagliato non è all'interno del feed ma proprio all'interno dell'articolo originale che viene visualizzato nel feed.

Solo che non mi spiego perché non effettui la sostituzione una volta caricato il link sbagliato.

Sicuro che nel link sbagliato ci sia proprio "avvisi" e non "avviso"? (altrimenti nell'IF non entra)

Ti faccio fare una prova, perché a distanza non è facile capire:


Only registered members can view code.

Cosi nelle alert vedi i passaggi dello script, se ottiene i link giusti e se entra nell'IF.

DeST
13-03-18, 19: 15
Sisi avvisi e avviso sono alcune delle parole che non ho sostituito quindi sono sicuramente al posto giusto
incollo i risultati degli alert per far capire (incollo prima in un blocco note per la sostituzione automatica di un paio di parole)

Only registered members can view code.
Only registered members can view code.
Only registered members can view code.

Da quel che vedo avvisi è l'unica parola che cambia :boh

Andy86
13-03-18, 20: 38
A questo punto direi che sono gli apici visualizzati in formato codificato a non far funzionare l'espressione regolare.
(Mi scuso per non essermene accorto prima, visto che l'avevi pure detto... :ehmm)

Quindi proviamo così:


Only registered members can view code.

DeST
13-03-18, 20: 52
Perfetto adesso funziona grazie infinite, figurati io commento senza capirne granchè ma un po mi hai insegnato a decodificare questi codici :clap