43ezer bookmark letorlese deliciousrol

(Amoyan FYI/NTS..)

A feladat: 43153 darab bookmark törlése a Deliciousról automatizáltan, tag alapján.

A megoldás: kézzel lekérjük a törlendő url-eket, majd azokat egy perl scriptnek beadva hosszadalmas munkával egyesével töröljük. Nem, nincs official way tag alapján törlésre, a tag törlésével a bookmarkok meg vígan ottmaradnak a helyükön.

Lépések:

  1. Lekérjük az URL-eket a publikus API segítségével:
    
    % curl 'https://endre:xxxxxxxxxxxx@api.del.icio.us/v1/posts/all?tag=irc' --compressed -o irc-bookmarks.xml
      % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                     Dload  Upload   Total   Spent    Left  Speed
    100 12.3M    0 12.3M    0     0   156k      0 --:--:--  0:01:21 --:--:--  158k

    Szép darab 12 megás XML lett belőle.

  2. Perl script írása, ami ezeket egyenként letörli, szintén az API-n keresztül. Követelmény a részletes LOGolás és cli-n is értelmsen kinéző progress/státusz megjelenítés kumulált hibaszámolással.
    
    #!/usr/bin/perl
    use strict;
    use warnings;
    require LWP::UserAgent;
    my $total=undef;
    my $error=0;
    my $current;
    my $api='api.del.icio.us';
    my $username='endre';
    my $password='xxxxxxxxxxxxx';
    my $response;
    my $sleepint=2;
    my %lwpSettings=(
            'agent'               => 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.17) Gecko/20080829 Firefox/2.0.0.17',
            'protocolls_allowed'  => [ 'http', 'https' ],
            'max-size'            => 2048000,
            'timeout'             => 3
    );
    $|=1;
    open(LOG, ">> removebookmarks.txt");
    my $lwp = LWP::UserAgent -> new(%lwpSettings);
    $lwp->credentials("${api}:443", "del.icio.us API", $username, $password);
    while(<>) {
            if (/total="(.*)">/) {
                    $total=$1;
                    printf ("removing a total of %d bookmarks...\n",$total);
            }
            if (/href="(.+?)"/) {
                    $current++;
                    my $hash=$1;
                    printf ("\r...current progress: removing bookmark %d out of %d total (%0.2f%%), errors so far: %d", $current,$total, ($current/$total)*100,$error);
                    my $request="https://${api}/v1/posts/delete?url=".$1;
                    my $response=$lwp->get($request);
                    if ($response->is_success) {
                            printf(LOG "+++ %s url '%s' removed successfully\n", scalar localtime, $hash);
                    } else {
                            printf(LOG "--- %s url '%s' Request failed\nUri: %s\nStatus: %s, Content: %s\n--- end of report on url '%s'\n",
                            scalar localtime(),
                            $hash,
                            $request,
                            $response->status_line,
                            $response->content,
                            $hash);
                            $error++;
                    }
                    sleep $sleepint;
            }
    }
    

Kimenete így néz ki futásidőben:


% perl ./massdeliciousbookmarksremover.pl < ../irc-bookmarks.xml
removing a total of 43153 bookmarks...
...current progress: removing bookmark 245 out of 43153 total (0.57%), errors so far: 2

Logja pediglen:


--- Sun Sep 27 22:48:42 2009 url 'http://fukung.net/v/9063/image_out_of_my_head.jpg' Request failed
Uri: https://api.del.icio.us/v1/posts/delete?url=http://fukung.net/v/9063/image_out_of_my_head.jpg
Status: 500 SSL read timeout: , Content: 500 SSL read timeout: 

--- end of report on url 'http://fukung.net/v/9063/image_out_of_my_head.jpg'
+++ Sun Sep 27 22:48:46 2009 url 'http://pastebin.com/f35f200af' removed successfully

Hozzászólások

Nem egyszerubb torolni az acc-ot, majd ujra letrehozni?

Egyebkent en is toroltem tegnap a linkjeimet. Kar, hogy nem tegnap irtad le ezt a megoldast :).