Πως να ανακαλύψετε τα blogs του yupi και της Athens Voice

ΠΡΟΣΟΧΗ: Αυτό το post δεν έχει καμμία χρηστική αξία για σένα, εκτός και αν ενδιαφέρεσαι να φτιάξεις έναν feed aggregator.

Ενα από τα πρωτα πράγματα που με απασχόλησαν κατά τη δημιουργία του mpouligator ήταν το πως θα ενημερώνω τη βάση με τα νέα blogs που δημιουργούνται κάθε μέρα. Το πρόβλημα λύθηκε με τη δημιουργία ενός robot που ρουφάει σελίδες σε δύο επίπεδα, απομονώνει τα urls τυπου xxx.blogspot.com, xxx.wordpress.com, xxx.pblogs.gr, xxx.spaces.live.com ελέγχει τις σελίδες για ελληνικούς χαρακτήρες, βρίσκει το feed url του καθενός και τέλος. Ο μηχανισμός δουλεύει και όπως μπορείς να δεις και από τη σελίδα των στατιστικών προστίθενται 60-70 νέα blogs κάθε μέρα, αυτόματα. Ενα βασικό στοιχείο της διαδικασίας είναι ότι και στις 4 προαναφερθείσες πλατφόρμες το feed url προκύπτει εύκολα αν γνωρίζεις το blog url. Πχ το feed url του mpoulis.wordpress.com είναι το mpoulis.wordpress.com/feed κ.ο.κ.

Στην πορεία προέκυψαν δύο νέα sites που μεταξύ άλλων προσφέρουν δυνατότητα δημιουργίας blog. Το yupi.gr και το athensvoice.gr. Και τα δύο βασίζονται σε μία πλατφόρμα που λέγεται ICE και από όσο έχω καταλάβει είναι ένας κλώνος του Joomla. To πρόβλημα εδώ ήταν ότι το blog url και το feed url δεν έχουν καμμία σχέση μεταξύ τους, π.χ. το feed url του http://blogs.yupi.gr/alice/ είναι το http://blogs.yupi.gr/rss/posts_a3f390d88e4c41f2747bfa2f1b5f87db.xml . Τρέχα γύρευε δηλαδή. ή  μήπως όχι;

Κοιτώντας πιο προσεκτικά το a3f390d88e4c41f2747bfa2f1b5f87db βλέπουμε ότι έχει μέγεθος 32 χαρακτήρες. Ο αριθμός δεν είναι και τόσο τυχαίος. Επίσης όλα τα feeds είναι κάτω από το ίδιο virtual directory. Αρα μάλλον πρόκειται για hash value. Ναι αλλά με ποιον αλγόριθμο;  O SHA1 αποκλείεται λόγω μεγέθους (160bit, 40 chars). Ο MD5 ταιριάζει γάντι (128bit, 32 chars). Αφού καταλήξαμε στον αλγόριθμο πρέπει να μαντέψουμε το input της hash function. Πρέπει να είναι κάτι μοναδικό στο blog. Τι είναι μοναδικό στο κάθε blog; Το url του, μέρος του url, με ή χωρίς το http, με ή χωρίς το / στο τέλος κλπ.  Ξεκινάμε δοκιμές υπολογίζοντας το hash value με διάφορα inputs, όπως: http://blogs.yupi.gr/alice/ – blogs.yupi.gr/alice/ – blogs.yupi.gr/alice – alice – /alice/ προσπαθώντας να πάρουμε σαν αποτέλεσμα το a3f390d88e4c41f2747bfa2f1b5f87db . Τζίφος. Διάλλειμα για τσιγάρο και βόλτα γύρω από το γραφείο. Κοιτάμε ξανά το xml source του feed ψάχνοντας απεγνωσμένα για κάτι που είναι μοναδικό. Τίποτα. Δεύτερο τσιγάρο, τρίτο τσιγάρο. Σκέψη από άλλο σημειο εκκίνησης. Τι είναι το blogs.yupi.gr; Πλατφόρμα για blogs. Μάλιστα. Που αποθηκεύονται τα blogs; Οι σελίδες στο file system και κάποια στοιχεία οπωσδήποτε σε μία βάση δεδομένων. Βάση δεδομένων; Aρα θα υπάρχει σίγουρα ένας master πίνακας οπου κάθε record θα ειναι ενα blog με τα βασικά στοιχεία (url, owner, περιγραφή κλπ). Ποιο θα είναι το primary key του πίνακα; To ονομα του blog (π.χ alice). Το δοκιμάσαμε και πήραμε τα !#$@% μας. χμμ. Για μισό λεπτό. Εγώ συνήθως ανεξάρτητα από αλλα keys συνήθως χρησιμοποιώ για primary key κάποιο auto-increment integer στη βάση. Λες; Πόσα blogs να υπάρχουν στο yupi; Οχι πάνω από 1000. Φτιαχνουμε στο καπάκι script που δείχνει τα hash values των ακέραιων από το 1 έως το 1000. Copy-paste του output στο notepad. Βάζουμε να ψάξει για το a3f390d88e4c41f2747bfa2f1b5f87db. ΕΥΡΗΚΑ! Πρόκειται για το hash value του αριθμού 68 ! Τα πράγματα από δω και πέρα είναι απλά. Δημιουργούμε 1000 urls του τύπου http://blogs.yupi.gr/rss/posts_HASHVALUE.xml. Τα χτυπάμε με http get. Εάν πάρουμε HTTP 200 OK, κάνουμε parse και αν πρόκειται για valid xml τα προσθέτουμε στον mpouligator. Και έτσι ανακαλύπτουμε 134 blogs στο yupi.gr και 629 στο athensvoice.gr. Σημειώνουμε τους αριθμούς του τελευταιου HTTP 200. Σε μια εβδομάδα θα ξεκινήσουμε από εκεί και θα σταματήσουμε στο +100. Οποτε καθαρίσαμε και με την ενημέρωση από εκεί.

Και πάμε για άλλα…

10 Σχόλια

  1. V on

    Ωραίος:-)

  2. cosmix on

    Αίσχος! (προς το yupi και το athensvoice) και εύγε(!) για την επιμονή και οξυδέρκεια σου.

    Το wordpress αλλά και το blogspot (όπως και πολλοί άλλοι), πολύ σωστά, ακολουθούν το auto-discovery πρότυπο και ορίζουν ένα link tag με rel=alternate στο οποίο παρέχουν τον mime τύπο (π.χ. application/rss+xml) καθώς και το url για το feed. Αν οι καλοί — πλήν όμως αδαείς —
    άνθρωποι του yupi και athensvoice αξιωθούν να προσθέσουν και αυτοί την *μια* σχετική γραμμή προς όφελος όλων των spiders που τύχουν στα κατατόπια τους, μάλλον καλό θα έκαναν σε όλους και προπαντός στα blogs που φιλοξενούν.

    Για το δικό σου blog η γραμμή αυτή είναι:

    <link rel="alternate" type="application/rss+xml" title="RSS 2.0" href="https://mpoulis.wordpress.com/feed/&quot; />

    Κάτι τέτοιο θεωρώ πως θα ήταν φρόνιμο για διάφορους λόγους αλλά κυρίως θα επέτρεπε σε ένα feed aggregator (και τον δημιουργό, maintainer του) να μην χρειαστεί να δημιουργήσει τάφρο γύρω από το γραφείο του/της από τις βόλτες ή να πιεί δύο κανάτες καφέ/καπνίσει 4 πακέτα τσιγάρα μέχρι να μαντέψει την ‘ταρζανιά’ που έκαναν. Συν τοις άλλοις θα επέτρεπε — αυτομάτως — σε όλους τους aggregators να επεξεργασθούν τα περιεχόμενα του τόπου τους.

    Προφανώς η λύση την οποία κατέληξες ‘δουλεύει’ (και όπως έγραψα παραπάνω σου αξίζουν συγχαρητήρια) αλλά δεν είναι ακριβώς κομψή ή low maintenance. Προφανώς το parsing του head για εύρεση του εν λόγω link tag αυξάνει το φόρτο/σελίδα για το bot σου, όμως αποτελεί σαφώς καλύτερο και καθιερωμένο τρόπο κατα την άποψή μου.

    Ελπίζω αργά η γρήγορα οι ελληνικές προσπάθειες φιλοξενίας blogs να επιδείξουν την αντίστοιχη ωριμότητα και τεχνική ικανότητα. Η λύση του yupi/athensvoice δυστυχώς ούτε ωριμότητα δείχνει ούτε τεχνική επίγνωση των προτύπων.

  3. Nick_theGeek on

    δεν είχα σκοπό να φτιάξω aggregetor, αλλά βρήκα το post σου εξαιρετικά ενδιαφέρον!! φέτος έκανα βάσεις δεδομένων και peer2peer συστήματα στην σχολή, και πραγματικά, η λογική σου περί hash functions, xml και primary keys με γοήτευσε!!
    ΕΥΓΕ!!!

  4. papo on

    i pay my total respect! Τόσο για επιμονή και την έξυπνη διάθεση αλλά ακόμα πιο πολύ γιατί δίνει public domain λύσεις και ιδέες που σίγουρα θα – φανούν χρήσιμες και αλλού! Ανωτερότητα!

  5. karpidis on

    Τόσο ενδιαφέρον που εγώ που είμαι εντελώς άσχετος το διάβασα ως το τέλος!

  6. nikan on

    Εύγε Σέρλοκ Χόλμς των feed. Σου έχω κι άλλο ένα ‘μυστήριο’: blog του Lifo. Μπορούμε να βρούμε feed?

  7. […] παράδειγμα αυτού που λέω σας παραπέμπω σ’ ένα πραγματικά έξυπνο ποστ που διάβασα στο μπλογκ του Μπούλη (ναι, έχει μπλογκ εδώ […]

  8. Rodia on

    Μπράβο Μπούλη!:-))) το πήρες πολύ ζεστά το πράγμα, αν και στην αρχή φαινόσουν διστακτικός και φοβόμουν μήπως βαρεθείς και τα παρατήσεις…

  9. magica on

    🙂
    άψογος

  10. Dimitris on

    Τα συγχαρητήρια μου κι απο μένα κατόπιν γρήγορου διαβάσματος του ποστ σου. Αναρωτιέμαι αν το joomla documentation θα μπορούσε να σε είχε βοηθήσει να μη χρειαστεί να κάνεις αυτούς τους παπάδες. Πάντως τέτοια δουλειά πρέπει να τη βγάζεις πιο συχνά στο blog, πιστεύω.


Αφήστε απάντηση στον/στην nikan Ακύρωση απάντησης