Ακίνδυνη Λογική

Κατά βούληση αποστολή συνδέσμων στο DownThemAll μέσω Jetpack script

Posted in Uncategorized by akindynos on 17 Αύγουστος, 2009

Τα δύο άρθρα του Stazybo Horn με οδηγίες για τη συλλογή συνδέσμων από πλήθος άρθρων ή/και σχολίων ενός μπλογκ (και πού να τα προλάβεις όλ’ αυτά; και τ’ άλλα;), αν και δεν απευθύνονται στον αρχάριο χρήστη, νομίζω πως μου επιτρέπουν μια βελτιωτική προσθήκη που μάλλον θα ξαφνιάσει ευχάριστα αρκετούς προχωρημένους χρήστες.

(αίσχος εισαγωγή, σαν διαφημιστικό tupperware)

Λοιπόν, ας μιλήσουμε σαν πραγματικοί άντρες και σαν πραγματικές γυναίκες, με τα πληκτρολόγια.

Αφού θα χρησιμοποιήσω τον μπράουζερ για τη συγκέντρωση των σελίδων που περιέχουν τους συνδέσμους, είτε σε html είτε σε xml documents, γιατί να μην παραμείνω στο ίδιο περιβάλλον για το ξάκρισμα και το κατέβασμα;

Εφόσον ο μπράουζερ είναι ο Firefox και χρησιμοποιώ μια επέκταση σαν το DownThemAll για download manager, το μόνο που λείπει είναι ένα scripting shell εντός του μπράουζερ.

Στην περιγραφή του το Jetpack ορίζεται ως

an API for allowing you to write Firefox add-ons using the web technologies you already know.

Στην πραγματικότητα Όπως το βλέπω εγώ, το Jetpack είναι ένα κέλυφος, σε πρώιμο στάδιο, που επιτρέπει στον προγραμματιστή να τρέχει δέσμες ενεργειών (script ντε) με πρόσβαση στο μεγαλύτερο μέρος του λειτουργιών του Firefox.

Δηλαδή δεν πρόκειται για το Greasemonkey με άλλο όνομα, αν και μπορεί να ειδωθεί έτσι, εφόσον το μόνο που ενδιαφέρει είναι η αλληλεπίδραση με το περιεχόμενο μιας ιστοσελίδας.

Είναι τόσο πολλά και ενδιαφέροντα τα επιπέον που μπορεί να κάνει, ώστε κάθε φορά που συναντώ ακόμα ένα jetpack script που κάτι κάνει στο HTML DOM ξεφυσάω με συγκρατημένη απελπισία.

Αρκετά όμως με το τι δεν είναι το Jetpack, επιστροφή στο πρόβλημά μας.

Με τον ένα ή τον άλλο τρόπο έχω μπροστά στα μάτια μου μια σελίδα σεβαστού μεγέθους με αναρίθμητους συνδέσμους. Για κάποιο λόγο τα φίλτρα του DownThemAll (δηλαδή regular expression match στο url) δεν είναι κατάλληλα. Ίσως επειδή τα url είναι της μορφής http://host/1.zip http://host/2.zip κλπ. και εγώ θέλω να κατεβάσω μόνο όσα ο τίτλος του post περιέχει το string «original soundtrack» ή να μην κατεβάσω όσα ο τίτλος του ποστ περιέχει το string «Britney Spears» ή (memo to self, να το δείξω σε επόμενο άρθρο) μόνο εκείνους τους συνδέσμους που δεν έχω ήδη επισκεφθεί.

Εκτός από το τελευταίο, τα υπόλοιπα σενάρια καλύπτοναι από τον xpath evaluator. Σε μεγάλα παιδιά απευθύνομαι, νομίζω δεν χρειάζεται να γίνω πιο αναλυτικός. Αλλά αν χρειάζεται, τα σχόλια γι’ αυτό υπάρχουν.

Είμαστε λοιπόν στην ευχάριστη θέση να κρατάμε στα χέρια μας έναν πίνακα με τα url που θέλουμε στείλουμε στο DownThemAll. Πως το κάνουμε προγραμματιστικά;

Απλό, ρίχνουμε μια (οκ, παραπάνω) ματιά στον κώδικα του DownThemAll. Σύμμαχοί μας το Chrome List και ο DOM Inspector. Με το πρώτο μπορούμε να δούμε εύκολα τον πηγαίο κώδικα (source code μωρέ) των περισσότερων αρχείων μιας επέκτασης, χωρίς να ψάχνουμε στο φάκελο των επεκτάσεων και στα νύχια μας ποιο μπορεί να είναι το guid της επέκτασης που μας ενδιαφέρει. Φυσικά οι πραγματικοί άντρες και οι πραγματικές γυναίκες δεν έχουν πρόβλημα να απομνημονεύσουν ένα guid, σε δυαδική μορφή. Με τον DOM Inspector μπορούμε να δούμε ποια global objects εκθέτει η επέκταση στο chrome window.

Και επιτέλους η ώρα του κώδικα.

Στην πρώτη γραμμή εισάγουμε το module Utils, δάνειο του Ubiquity στο Jetpack. Με αυτό αποκτούμε πρόσβαση στο chrome window και έτσι στα global objects του DownThemAll. Τα υπόλοιπα νομίζω δεν θέλουν εξήγηση. Βάζουμε τις γραμμές let url = και urls.push σε ένα loop και αυτό ήταν. Η πρωτη παράμετρος στη saveLinkArray ελέγχει αν θα εμφανιστεί το UI του DownThemAll. Με true δεν εμφανίζεται, με false εμφανίζεται. Σημειώστε πως σε κάθε περίπτωση τα φίλτρα του DownThemAll Θα εφαρμοστούν. Αν το αγνοείσετε, ανάλογα με το τι φίλτρα χρησιμοποιείτε, μπορεί να επιστρέψετε και να γκρινιάζετε ότι δεν δουλεύει και άλλα τέτοια δυσφημιστικά.

Components.utils.import("resource://jetpack/ubiquity-modules/utils.js");

jetpack.statusBar.append({
  html: "<span style='font-size:13.5px;'>dTa</span>",
  width: 22,
  onReady: function(widget){
    $(widget).click(function(){
      var browserWindow = Utils.currentChromeWindow;
      var dtaaddingfunctions = browserWindow.DTA_AddingFunctions;
      var dtaurl = browserWindow.DTA_URL ;

      var urls = [], images = [];

      let url = dtaaddingfunctions.ios.newURI("http://www.example.com/", null, null);
      urls.push({
                 'url': new dtaurl(url),
                 'referrer': '',
                 'description': '',
                 'ultDescription': ''
               });

      try{
        dtaaddingfunctions.saveLinkArray(true, urls, images);
      }
      catch(ex){
        console.log(ex);
      }
    });
  }
});

Αυτό ήταν, δεν έχει άλλο.

Advertisements
Tagged with: , ,

3 Σχόλια

Subscribe to comments with RSS.

  1. Stazybο Hοrn said, on 17 Αύγουστος, 2009 at 8:25 μμ

    Χμμμ. Ποτέ δεν συμπάθησα το downthemall. Γιατί με βάζεις να το ξαναεγκαταστήσω; flashgot και idm δουλεύω… Το δοκίμασες το script και δουλεύει σε output xml σαν αυτά του google api;

    Παρακάμπτει το downthemall τις «url-protector» υπηρεσίες;

    Πάω να το κοιτάξω λίγο περισσότερο.

    Σημ: Περίμενα να είσαι ο ένας που θα είχε ενδιαφέρουσες προτάσεις για τη συνέχεια της αρχικής ιδέας.

  2. akindynos said, on 17 Αύγουστος, 2009 at 9:09 μμ

    Στο script δείχνω μόνο πως γίνεται η επικοινωνία με το downthemall. Ο τρόπος ανάκτησης των url είναι δουλειά αυτού θα θελήσει να το αξιοποιήσει. Το xml output δεν είναι πρόβλημα, αν προσέξεις λιγο, αλλά λογικά το html content θα είναι σε CDATA block οπότε πάλι τίθεται πρόβλημα πως θα κάνεις πολύπλοκα φιλτραρίσματα σαν αυτά που αναφέρω.

    (θα φτιάξεις, προγραμματιστικά πάντα, ένα dummy div, θα βάλεις τον κώδικα html στο innerHTML και είσαι ετοιμος)

    Για τις πασπαρτουικές (!) ικανότητες του downthemall θα σε γελάσω, το χρησιμοποιώ σχεδόν αποκλειστικά με rapidshare, εννοείται πως έχω account.

    Αλλά αν δεν μιλάμε για captcha, απλά ένα κλικ εδώ εν μέσω μπάνερ, όλο και κάποιος θα έχει γράψει ένα greasemonkey script.

    Θα τσεκάρω κάποια στιγμή τι γίνεται και με την έξοδο από το google api, καθώς και με flashgot και idm.

    • Stazybο Hοrn said, on 17 Αύγουστος, 2009 at 9:14 μμ

      Η πρώτη μου γενική εντύπωση είναι ότι εν προκειμένω η περαιτέρω «αυτοματοποίηση» δεν αξίζει τον κόπο, λόγω ποικιλίας τωρινών και αυριανών περιπτώσεων…


Σχολιάστε

Εισάγετε τα παρακάτω στοιχεία ή επιλέξτε ένα εικονίδιο για να συνδεθείτε:

Λογότυπο WordPress.com

Σχολιάζετε χρησιμοποιώντας τον λογαριασμό WordPress.com. Αποσύνδεση / Αλλαγή )

Φωτογραφία Twitter

Σχολιάζετε χρησιμοποιώντας τον λογαριασμό Twitter. Αποσύνδεση / Αλλαγή )

Φωτογραφία Facebook

Σχολιάζετε χρησιμοποιώντας τον λογαριασμό Facebook. Αποσύνδεση / Αλλαγή )

Φωτογραφία Google+

Σχολιάζετε χρησιμοποιώντας τον λογαριασμό Google+. Αποσύνδεση / Αλλαγή )

Σύνδεση με %s

Αρέσει σε %d bloggers: