Sida 1 av 1

Rippa låtar från vkgoeswild.com

Postat: 27 apr 2010, 18:43
av m!rage
Det finns en Youtube-kändis som kallar sig vkgoeswild. Hon gör riktigt bra piano-covers av metal-låtar. Många av dessa covers har hon lagt upp som mp3-filer på sin hemsida http://www.vkgoeswild.com/. Eftersom jag inte hade någon lust att klicka på alla 170 länkarna en i taget skrev jag ett program som gör det åt mig. Inget jag är särskilt stolt över för jag rafsade ihop det på mindre än en timme. Beskrivningen finns i den inledande kommentaren:

Kod: Markera allt

/*
 * vkgoeswild ripper rev. 1
 *
 * Sparar alla mp3-filer från vkgoeswild.com med hjälp av wget.
 *
 * Användning: Gå in på http://www.vkgoeswild.com/?section=mp3&songs=1 och visa
 * HTML-koden för länkarna till mp3-filerna. Den ska vara i formatet
 * <li><a href="downloads.php3?song=355">Guns N' Roses - Estranged</a><li><a href... osv.
 * Kopiera hela raden och spara i filen vkgoeslinks i mappen du står i när du kör programmet.
 * Kör programmet med ./vkripper
 * Det sparar alla filer i vkgoeslinks till mappen du står i.
 *
 * OBS! Jag har inte implementerat någon felhantering alls för jag
 * slängde bara ihop programmet på en halvtimme. Det KAN (läs: kommer att) krasha
 * om något oväntat händer, men det duger för mina behov för tillfället.
 *
 * Koden för funktionen Tokenize har jag tagit utan lov från
 * http://www.oopweb.com/CPP/Documents/CPPHOWTO/Volume/C++Programming-HOWTO-7.html
 * Hoppas att det går bra.
 *
 * All annan kod är skriven av mig
 * (c) Anton Eliasson, 26 april 2010
 * Licens: Creative Commons Attribution-Share Alike 3.0
 *
 */

#include <iostream>
#include <string>
#include <algorithm>
#include <vector>
#include <fstream>
using namespace std;

void Tokenize(const string& str, vector<string>& tokens, const string& delimiters = " ")
{
    // Skip delimiters at beginning.
    string::size_type lastPos = str.find_first_not_of(delimiters, 0);
    // Find first "non-delimiter".
    string::size_type pos     = str.find_first_of(delimiters, lastPos);

    while (string::npos != pos || string::npos != lastPos)
    {
        // Found a token, add it to the vector.
        tokens.push_back(str.substr(lastPos, pos - lastPos));
        // Skip delimiters.  Note the "not_of"
        lastPos = str.find_first_not_of(delimiters, pos);
        // Find next "non-delimiter"
        pos = str.find_first_of(delimiters, lastPos);
    }
}

int main()
{
    ifstream infil;
    vector<string> tokens;

    infil.open("vkgoeslinks");
    if (!infil) {
        cout << "Kunde inte öppna fil!";
        exit(1);
    }

    string str;
    getline(infil, str);    // bör ta hela filen om den är i rätt format
    
    Tokenize(str, tokens, "\"");

    for (unsigned int i = 0; i < tokens.size(); i++) {
/*        if (i % 2 == 1) {   // vi vill endast ha de ojämna strängarna
            cout << tokens.at(i) << endl;
        }*/
        string temp = tokens.at(i); // plockar ut en delsträng
        //cout << temp << endl;
        if (temp.find("downloads.php3?song=") == 0) {    // giltig länk
            string cmd = "wget http://www.vkgoeswild.com/" + temp;  // bygg kommando
//            cout << cmd << endl;
            if (system(cmd.c_str())) {  // spara mha wget
                cout << "status: 1\n";
            } else {
                cout << "status: 0\n";
            }
        }
    }
}
Här kan man lyssna på hennes piano-covers.

Re: Rippa låtar från vkgoeswild.com

Postat: 27 apr 2010, 20:01
av Hylas
Detta var hur bra som helst ;D Tack för den länken!

Som hon behandlar Metallica:

http://www.youtube.com/watch?v=Q_nm3_Y3ldg

Grymt!

Re: Rippa låtar från vkgoeswild.com

Postat: 27 apr 2010, 22:06
av m!rage
Jo jag vet. Alltid bra ljudkvalitet också, till skillnad från de flesta andra pianolirare på YT som använder kamerans mikrofon så spelar hon in direkt från pianots ljudutgång

Re: Rippa låtar från vkgoeswild.com

Postat: 30 apr 2010, 08:56
av pun
Hon är ju kanon efter att ha lyssnat igenom några låtar.... ;D

Re: Rippa låtar från vkgoeswild.com

Postat: 30 apr 2010, 10:04
av dmz
Din lösning fungerar säkert jättebra, men jag är lat av mig och att manuellt kopiera ur koden känns... jobbigt. :p
Så jag gjorde en oneliner som sparar filerna efter namn-id;

Kod: Markera allt

curl http://www.vkgoeswild.com/\?section\=mp3\&songs\=1 | grep '<li><a href="downloads.php3'|perl -pe 's/<\/a>/\n/g'|perl -pe 's/^<.+\?song=//g'|perl -pe 's/">/,/'|perl -pe '%h=();while(<>){my($id,$name) = split /,/; $h{$id} = $name;}print "$_\n" for keys %h;my $burl="http://www.vkgoeswild.com/?section=mp3&songs=1";use WWW::Mechanize; my $m=WWW::Mechanize->new;$m->get($burl);foreach my $song($m->links){if($song->url_abs =~ /.+song=([0-9]+)$/) {my $id = $1;my $fname = $h{$id}.$id.".mp3";$m->follow_link(url => $song->url); print "Saving ". $song->url, " to ", "$fname\n";$m->save_content($fname);$m->back;}}'

Re: Rippa låtar från vkgoeswild.com

Postat: 30 apr 2010, 10:41
av Hund
Snuff är nog min favorit. Det är ruskigt bra stämningen över den. Tack för tips om henne (och skriptet). :P

Re: Rippa låtar från vkgoeswild.com

Postat: 30 apr 2010, 19:20
av m!rage
Jag har inte lyssnat igenom hälften än, men Snuff var väldigt bra.
@dmz:
Du ska alltid vara värst :P Har inte testat ditt skript (fattar inte mycket av det heller :)) men det fungerar säkert minst lika bra