Pobieracz - program do pobierania mp3 i mp4

Odpowiedz Nowy wątek
2011-07-14 23:24
0

Witam,
przedstawiam program automatyzujący proces pobierania muzyki z wrzuty i klipów w formacie mp4 z youtube. Program pisany w celach edukacyjnych, więc nie ma co się wiele spodziewać fajerwerków, ale ocena i konstruktywna krytyka mile widziane.

http://www.przeklej.pl/plik/pobieracz-v1-0-rar-002bf0anl03p

Uwaga: layout programu może powodować raka i choroby serca.

edytowany 3x, ostatnio: prisixn, 2011-07-14 23:29

Pozostało 580 znaków

2011-07-14 23:55
0

W sumie to całkiem nieźle zrobione, nie ma 'niewiadomoczego', ale spełnia swoją podstawową funkcję jak najbardziej.

Pozostało 580 znaków

2011-07-15 01:04
0

No to moje uwagi, bo kiedyś również napisałem i później poprawiałem po zmianach w serwisie program do pobierania z wrzuta.pl plików mp3 lub filmów po wklejeniu konkretnego linka. Na plus: podgląd plików, ale jego nie testowałem, bo jak niżej wyjaśaniam minusy: Minusy: program bardzo wolno wyszukuje, a czasami nawet nic nie pokazuje tylko w kółko jest Trwa, nawet jak z pod Opery działanie strony wrzuta.pl jest natychmiastowe. Poza tym wolne pobieranie pliku, tak mi sie wydaje, mój downloader daną mp3ke pobiera również wolno, bo tak wolno działa wrzuta, ale robi to i tak o wiele szybciej. Brakuje możliwości anulowania wyszukiwania. Można zmieniac wpis w trakcie szukania, a według mnie wtedy pole edycyjne powinno mieć ReadOnly na True i wyszarzone tło w kolorze (przynajmniej tak jest pod Delphi) clInactiveBorder. Przydało by się domyslne zaznaczenie radiobuttona z wyborem MP3 lub zapamiętanie tego w pliku ini przykładowo w podkatalogu %AppData%. Dodam jeszcze, że wyszukiwarka zadziałała mi dla frazy "Captain Hollywood" tylko raz, później już szukała i szukała i nic. Do tego plik wykonywalny spakował bym na przykład UPX'em. Zawsze ciut mniej to zajmie. Wiem łącza mamy teraz szybkie, ale powinno sie dążyć do tego żeby program była jak najmniejszy i jak najzgrabniejszy. A i ponumerowałeś wersje 1.0, też tak kiedyś robiłem. W sumie przy amatorskim kodowaniu to szczegół, ale lepiej zaczynać numerowanie od bardzo niskich numerów typu 0.1 albo nawet 0.0.1, a wersja 1.0 powinna być mocno rozwinięta i pozbawiona wszelkich błędów. Sam swój program pod linkiem z mojej sygnaturki zacząłem numerować od 0.1, a teraz jest wersja 0.99, bo w międzyczasie poprawiałem rożne błedy, a i FaceBook zmieniał zawartość pobieranego kodu html i program również musiał być zmieniony, aby nadal działał, jak należy. A co do Twojego tworu to więcej uwag nie mam. Może ktoś jeszcze coś znajdzie i napisze. Ka osobiście wolę użyć swojego Wrzuta Downloader (który też numewrowałem tak szumnie od 1.0 ;)) aby mieć ustawioną nazwę pliku z podanego linku. Ewentualnie jak coś szybko pobrać z wrzuta.pl to przydaje się userjs dla Opery napisany i poprawiony dla obsługi serwisu po zmianach - przez Zajca z forum supportu Opery. Jedno kliknięcie na stronie z plikiem i zapis.


edytowany 2x, ostatnio: olesio, 2011-07-15 01:07

Pozostało 580 znaków

2011-07-15 02:39
0
olesio napisał(a)

program bardzo wolno wyszukuje, a czasami nawet nic nie pokazuje tylko w kółko jest Trwa, nawet jak z pod Opery działanie strony wrzuta.pl jest natychmiastowe

Wolno czyli ile czasu? Sprawdzałem na 2 kompach, na obu wyszukiwanie trwa 1-2sek, więc stosunkowo szybko.

olesio napisał(a)

Poza tym wolne pobieranie pliku, tak mi sie wydaje, mój downloader daną mp3ke pobiera również wolno, bo tak wolno działa wrzuta, ale robi to i tak o wiele szybciej

Z tym planuje coś zrobić(prawdopodobnie użyje jakiejś gotowej biblioteki np. cURL) w najbliższym czasie, bo rzeczywiście demonem szybkości mój program nie jest.

olesio napisał(a)

Brakuje możliwości anulowania wyszukiwania. Można zmieniac wpis w trakcie szukania, a według mnie wtedy pole edycyjne powinno mieć ReadOnly na True i wyszarzone tło w kolorze (przynajmniej tak jest pod Delphi)

Myślałem że anulowanie wyszukiwanie nie jest potrzebne, skoro wyszukiwało się szybko, praktycznie natychmiastowo(przynajmniej u mnie).

olesio napisał(a)

Dodam jeszcze, że wyszukiwarka zadziałała mi dla frazy "Captain Hollywood" tylko raz, później już szukała i szukała i nic. Do tego plik wykonywalny spakował bym na przykład UPX'em. Zawsze ciut mniej to zajmie. Wiem łącza mamy teraz szybkie, ale powinno sie dążyć do tego żeby program była jak najmniejszy i jak najzgrabniejszy

Też przed chwilą zauważyłem ten bug z wyszukiwaniem niektórych fraz, ale póki co nie mam pojecia co jest jego przyczyną...
.

Pozostało 580 znaków

2011-07-15 08:47
0

Przyczyna błędu leży zawsze tam, gdzie się jej nie spodziewasz :D
To jest jakiś fenomen, w moim projekcie to samo miałem był błąd ewidentnie myślałem "tutaj coś musi być nie tak" i tak szedłem szlaczkiem i idę idę i doszedłem do zupełnie innego miejsca gdzie był faktyczny błąd :P
Tak pół żartem, pół serio.

Pozostało 580 znaków

2011-07-27 00:58
0

Witam ponownie, troche zmodyfikowałem moją aplikację i poprawiłem część błędów(te które znalazłem), zmieniłem tez wygląd i jest teraz trochę mniej odstraszający.
user image

Link: http://www.przeklej.pl/plik/pobieracz-v1-2-rar-002bp81cibq4

Pobaw się z rozmairem, podawanie MB poprzecinku jest ble, podziel na MB, KB itd - O_o 2011-07-27 01:12

Pozostało 580 znaków

2012-02-27 13:01
0

Odświeżam temat. Wprowadzone drobne zmiany, dodana możliwość pobierania mp3 z youtube, kolejka pobierania, poprawione wyświetlanie poglądu z youtuba.

Wersja instalacyjna: http://www.przeklej.pl/plik/pobieracz-setup-rar-0044jm68o1qi3sp
Wersja bez instalacji: http://www.przeklej.pl/plik/pobieracz-rar-0044jm7ap1qi3sp

user image
user image

Zdaje sobie sprawę że zbyt wiele do oceniania tu nie ma, ale kod wrzucę dopiero gdy go trochę uporządkuje.

spoko. w czym pisałeś? - ubuntuser 2012-02-27 13:23
The Analogs, propsuję. Punks not dead. - piternet 2012-02-27 22:55

Pozostało 580 znaków

2012-02-27 17:04

Jeśli chodzi o program:

  1. Nie można zmienić rozmiaru okna, ale można je zmaksymalizować.
  2. Lista wyszukanych piosenek jest tak wąska, że nie widać tytułów.
  3. Na liście mogłoby być menu kontekstowe z pozycjami "podgląd", "dodaj do kolejki", itd.
  4. Podgląd uruchamiałbym w nowym oknie, a nie na zakładce.
  5. Albo w ogóle nie robiłbym żadnych zakładek, tylko większą formę, u góry po lewej lista wyszukanych utworów, po prawej podgląd aktualnie zaznaczonego pliku, pod spodem kolejka pobierania.
  6. W oknie wyboru jakości oprócz tych, które filmik udostępnia i które można zaznaczyć, są też nieklikalne. Moim zdaniem powinno ich nie być.
  7. Przycisk "dodaj do kolejki" nie powinien działać przy pustej liście.
  8. Gdy wybieram opcję "MP3", to ściąga mi się plik w formacie aac.
  9. Gdy wybiorę którąś z opcji wideo i opcję MP3, to ściąga mi się tylko plik dźwiękowy.
  10. Po pobraniu pliku audio, i po udzieleniu zgody na rozpoczęcie nowego pobierania, kolejka nie jest czyszczona.
  11. Niektóre pliki wideo po pobraniu nie działa, MPC wyświetla komunikat: "Unsupported DocType: webm".
  12. Po dodaniu pliku do kolejki nie można już go z niej usunąć.
  13. Próba pobrania tego jako MP3:
    kończy się takim wyjątkiem:
    System.UriFormatException: Nieprawidłowy identyfikator URI: schemat URI jest nieprawidłowy.
    w System.Uri.CreateThis(String uri, Boolean dontEscape, UriKind uriKind)
    w System.Uri..ctor(String uriString)
    w Pobieracz_v1._6.Form1.PobierzAsynchronicznie()
    w Pobieracz_v1._6.Form1.w_DownloadFileCompleted(Object sender, AsyncCompletedEventArgs e)
    w System.Net.WebClient.OnDownloadFileCompleted(AsyncCompletedEventArgs e)
    w System.Net.WebClient.DownloadFileOperationCompleted(Object arg)
  14. Przed wykonaniem wyszukiwania można klikać w przyciski dalej/wcześniej powodując w ten sposób wyjątek.

Jeśli chodzi o kod, to mogłoby go być jakieś 10 razy mniej.

  1. Takie rzeczy jak jakość filmiku powinny być opisane przez Enum, a nie przez zestaw wielu zmiennych typu bool!
  2. Oto fragment metody WyszukiwanieUtworuYouTube:
    if (array.Length == 1)
    {
        webRequest = WebRequest.Create("http://www.youtube.com/results?search_query=" + this._tytulUtworu1 + "&aq=f");
    }
    else
    {
        if (array.Length == 2)
        {
            webRequest = WebRequest.Create(string.Concat(new string[]
            {
                "http://www.youtube.com/results?search_query=", 
                array[0], 
                "+", 
                array[1], 
                "&aq=f"
            }));
        }
        else
        {
            if (array.Length == 3)
            {
                webRequest = WebRequest.Create(string.Concat(new string[]
                {
                    "http://www.youtube.com/results?search_query=", 
                    array[0], 
                    "+", 
                    array[1], 
                    "+", 
                    array[2], 
                    "&aq=f"
                }));
            }
            else
            {
                if (array.Length == 4)
                {
                    webRequest = WebRequest.Create(string.Concat(new string[]
                    {
                        "http://www.youtube.com/results?search_query=", 
                        array[0], 
                        "+", 
                        array[1], 
                        "+", 
                        array[2], 
                        "+", 
                        array[3], 
                        "&aq=f"
                    }));
                }
                else
                {
                    if (array.Length == 5)
                    {
                        webRequest = WebRequest.Create(string.Concat(new string[]
                        {
                            "http://www.youtube.com/results?search_query=", 
                            array[0], 
                            "+", 
                            array[1], 
                            "+", 
                            array[2], 
                            "+", 
                            array[3], 
                            "+", 
                            array[4], 
                            "&aq=f"
                        }));
                    }
                    else
                    {
                        if (array.Length == 6)
                        {
                            webRequest = WebRequest.Create(string.Concat(new string[]
                            {
                                "http://www.youtube.com/results?search_query=", 
                                array[0], 
                                "+", 
                                array[1], 
                                "+", 
                                array[2], 
                                "+", 
                                array[3], 
                                "+", 
                                array[4], 
                                "+", 
                                array[5], 
                                "&aq=f"
                            }));
                        }
                        else
                        {
                            if (array.Length == 7)
                            {
                                webRequest = WebRequest.Create(string.Concat(new string[]
                                {
                                    "http://www.youtube.com/results?search_query=", 
                                    array[0], 
                                    "+", 
                                    array[1], 
                                    "+", 
                                    array[2], 
                                    "+", 
                                    array[3], 
                                    "+", 
                                    array[4], 
                                    "+", 
                                    array[5], 
                                    "+", 
                                    array[6], 
                                    "&aq=f"
                                }));
                            }
                            else
                            {
                                if (array.Length == 8)
                                {
                                    webRequest = WebRequest.Create(string.Concat(new string[]
                                    {
                                        "http://www.youtube.com/results?search_query=", 
                                        array[0], 
                                        "+", 
                                        array[1], 
                                        "+", 
                                        array[2], 
                                        "+", 
                                        array[3], 
                                        "+", 
                                        array[4], 
                                        "+", 
                                        array[5], 
                                        "+", 
                                        array[6], 
                                        "+", 
                                        array[7], 
                                        "&aq=f"
                                    }));
                                }
                                else
                                {
                                    if (array.Length == 9)
                                    {
                                        webRequest = WebRequest.Create(string.Concat(new string[]
                                        {
                                            "http://www.youtube.com/results?search_query=", 
                                            array[0], 
                                            "+", 
                                            array[1], 
                                            "+", 
                                            array[2], 
                                            "+", 
                                            array[3], 
                                            "+", 
                                            array[4], 
                                            "+", 
                                            array[5], 
                                            "+", 
                                            array[6], 
                                            "+", 
                                            array[7], 
                                            "+", 
                                            array[8], 
                                            "&aq=f"
                                        }));
                                    }
                                    else
                                    {
                                        if (array.Length == 10)
                                        {
                                            webRequest = WebRequest.Create(string.Concat(new string[]
                                            {
                                                "http://www.youtube.com/results?search_query=", 
                                                array[0], 
                                                "+", 
                                                array[1], 
                                                "+", 
                                                array[2], 
                                                "+", 
                                                array[3], 
                                                "+", 
                                                array[4], 
                                                "+", 
                                                array[5], 
                                                "+", 
                                                array[6], 
                                                "+", 
                                                array[7], 
                                                "+", 
                                                array[8], 
                                                "+", 
                                                array[9], 
                                                "&aq=f"
                                            }));
                                        }
                                        else
                                        {
                                            if (array.Length == 11)
                                            {
                                                webRequest = WebRequest.Create(string.Concat(new string[]
                                                {
                                                    "http://www.youtube.com/results?search_query=", 
                                                    array[0], 
                                                    "+", 
                                                    array[1], 
                                                    "+", 
                                                    array[2], 
                                                    "+", 
                                                    array[3], 
                                                    "+", 
                                                    array[4], 
                                                    "+", 
                                                    array[5], 
                                                    "+", 
                                                    array[6], 
                                                    "+", 
                                                    array[7], 
                                                    "+", 
                                                    array[8], 
                                                    "+", 
                                                    array[9], 
                                                    "+", 
                                                    array[10], 
                                                    "&aq=f"
                                                }));
                                            }
                                            else
                                            {
                                                if (array.Length == 12)
                                                {
                                                    webRequest = WebRequest.Create(string.Concat(new string[]
                                                    {
                                                        "http://www.youtube.com/results?search_query=", 
                                                        array[0], 
                                                        "+", 
                                                        array[1], 
                                                        "+", 
                                                        array[2], 
                                                        "+", 
                                                        array[3], 
                                                        "+", 
                                                        array[4], 
                                                        "+", 
                                                        array[5], 
                                                        "+", 
                                                        array[6], 
                                                        "+", 
                                                        array[7], 
                                                        "+", 
                                                        array[8], 
                                                        "+", 
                                                        array[9], 
                                                        "+", 
                                                        array[10], 
                                                        "+", 
                                                        array[11], 
                                                        "&aq=f"
                                                    }));
                                                }
                                                else
                                                {
                                                    if (array.Length == 13)
                                                    {
                                                        webRequest = WebRequest.Create(string.Concat(new string[]
                                                        {
                                                            "http://www.youtube.com/results?search_query=", 
                                                            array[0], 
                                                            "+", 
                                                            array[1], 
                                                            "+", 
                                                            array[2], 
                                                            "+", 
                                                            array[3], 
                                                            "+", 
                                                            array[4], 
                                                            "+", 
                                                            array[5], 
                                                            "+", 
                                                            array[6], 
                                                            "+", 
                                                            array[7], 
                                                            "+", 
                                                            array[8], 
                                                            "+", 
                                                            array[9], 
                                                            "+", 
                                                            array[10], 
                                                            "+", 
                                                            array[11], 
                                                            "+", 
                                                            array[12], 
                                                            "&aq=f"
                                                        }));
                                                    }
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }

    Hmm... A co, jeśli podam 14 slów kluczowych? A gdyby tak użyć pętli?
    Widzę, że podobne podejście stosujesz w metodach od zmiany strony wyszukiwania.

  3. Metody 'PrzejscieDoNastepnejStronyYoutubeorazPrzejscieDoPoprzedniejStronyYoutube'' mają ponad 100 linijek, a różnią się jedną linijką kodu. Do tego ich końcowa część jest prawie identyczna jak ta w metodzie Wyszukaj.
  4. Analogicznie jest w klasie Wrzuta.
  5. O co chodzi z tym fragmentem metody KonwersjaDoMP3?
    Form1 form = new Form1();
    form.timer1_Tick(this.sender, this.e);
  6. W Form1 metody obsługujące przyciski wyszukaj, dalej i poprzedni wyglądają tak:
    if (this.rbWrzuta.Checked)
    // cośtam
    if (this.rbYoutube.Checked)
    // dokładnie to samo co wyżej

    Klasy YouTube i Wrzuta powinny dziedziczyć z jakiejś klasy abstrakcyjnej i udostępniać takie same metody, zaś klasa Form1 mogłaby mieć pole typu tej klasy abstrakcyjnej. Wtedy zmiana radiobuttona podstawiałaby jedynie pod pole klasy właściwy obiekt, a w reszcie aplikacji nie potrzebowałbyś ani jednego ifa do sprawdzenia, z którego portalu użytkownik chce pobierać pliki.

  7. To nie jest Java, jeśli jest dużo opcji, to stosuje się switch, a nie else-if. Chociaż to trudno nawet else-if nazwać:
if (wyborJakosciYoutube.wybranaJakosc == 240)
            {
                this.pobieraniePlikuYoutube240();
            }
            else
            {
                if (wyborJakosciYoutube.wybranaJakosc == 360)
                {
                    this.pobieranieplikuyoutube360();
                }
                else
                {
                    if (wyborJakosciYoutube.wybranaJakosc == 480)
                    {
                        this.pobieraniePlikuYoutube480();
                    }
                    else
                    {
                        if (wyborJakosciYoutube.wybranaJakosc == 720)
                        {
                            this.pobieraniePlikuYoutube720();
                        }
                        else
                        {
                            if (wyborJakosciYoutube.wybranaJakosc == 1080)
                            {
                                this.pobieraniePlikuYoutube1080();
                            }
                            else
                            {
                                if (wyborJakosciYoutube.wybranaJakosc == 3)
                                {
                                    this.flagaKontrolna = true;
                                    this.pobieranieplikuyoutube360();
                                }
                                else
                                {
                                    MessageBox.Show("jakość nie wybrana");
                                }
                            }
                        }
                    }
                }
            }
  1. W powyższym kodzie w ogóle nie powinno być żadnej instrukcji warunkowej. Metody z zestawu pobieraniePlikuYoutue* są tak do siebie podobne, że można by je zastąpić jedną, przyjmującą w parametrze Enum opisujący jakość filmu.
  2. W każdej z tych metod powtarzasz sekwencję:
    this.sciezkaDoPobraniaYoutube = this.sciezkaDoPobraniaYoutube.Replace("\\u0026", "&");
    this.sciezkaDoPobraniaYoutube = this.sciezkaDoPobraniaYoutube.Replace("%3A%2F%2F", "://");
    this.sciezkaDoPobraniaYoutube = this.sciezkaDoPobraniaYoutube.Replace("%2F", "/");
    this.sciezkaDoPobraniaYoutube = this.sciezkaDoPobraniaYoutube.Replace("%3F", "?");
    this.sciezkaDoPobraniaYoutube = this.sciezkaDoPobraniaYoutube.Replace("%3D", "=");
    this.sciezkaDoPobraniaYoutube = this.sciezkaDoPobraniaYoutube.Replace("%252", "%2");
    this.sciezkaDoPobraniaYoutube = this.sciezkaDoPobraniaYoutube.Replace("%26", "&");
    this.sciezkaDoPobraniaYoutube = this.sciezkaDoPobraniaYoutube.Replace("\\/", "/");

    Po pierwsze, nie wiem dlaczego wolałeś użyć kopiuj-wklej zamiast stworzyć metodę pomocniczą.
    Po drugie, gdy masz tyle operacji do wykonania na stringu użyj klasy StringBuilder, będzie to rozwiązanie mniej pamięciożerne i szybsze.
    Po trzecie, w tym przypadku powinieneś użyć słownika (Dictionary<string, string>), który zawierałby te pary ciągów do zastąpienia oraz pętli.

  3. Przede wszystkim, wszystkie operacje "biznesowe", czyli u Ciebie głównie tworzenie urli i ściąganie plików nie powinny się w ogóle odbywać w klasie Form1. Ta klasa powinna jedynie obsługiwać akcje użytkownika (czyli np. zdarzenia przycisków) i wyświetlać mu informacje, nic więcej.
    I jeszcze taka mała uwaga - WinForms powoli będzie umierało, obecnie lepiej chyba uczyć się nowocześniejszych technologii, takich jak WPF.

"HUMAN BEINGS MAKE LIFE SO INTERESTING. DO YOU KNOW, THAT IN A UNIVERSE SO FULL OF WONDERS, THEY HAVE MANAGED TO INVENT BOREDOM."
edytowany 5x, ostatnio: somekind, 2012-02-27 18:13
Niezła recenzja :>. Z drugiej strony, sądząc po twoim opisie, kod przypomina WTF. - msm 2012-02-27 19:00
WTF występuje w kodzie produkcyjnym albo komercyjnym. Tutaj po prostu widać, że pisał to początkujący, który nie zna wszystkich mechanizmów języka, struktur danych oraz wzorców projektowych, za to wie do czego służy ctrl+v, ctrl+v. ;) - somekind 2012-02-27 19:27
"5. O co chodzi z tym fragmentem metody KonwersjaDoMP3?" tu chodziło mi o zatrzymanie metody na 2sek : D - prisixn 2012-02-27 21:16
No to wystarczy chyba użyć Thread.Sleep(2000); żeby to osiągnąć. :) - somekind 2012-02-27 21:21
Teraz widzę że to rozsądniejsze rozwiązanie niż tworzenie kontrolki nic nierobiącej. - prisixn 2012-02-27 21:27
No, zdecydowanie. Ja w ogóle bym się nie domyślił, że tak można zrobić. ;) - somekind 2012-02-27 22:19

Pozostało 580 znaków

2012-02-27 18:17
0

Uważaj bo Cię zgarną za piracenie youtube'a :D

Pozostało 580 znaków

2012-02-27 21:14
0

Dzięki somekind za obszerną recenzję i konstruktywną krytykę.
Co do programu to postaram się poprawić te błędny o których wspomniałeś. A co do kodu(co mnie bardziej interesuje) rzeczywiście mogłoby być go zdecydowanie mniej. Największym problemem było zaprojektowanie aplikacji. Tej jak widać w ogóle nie projektowałem, ani nawet nie zastanawiałem się jak rozplanować klasy.
Na początku program miał tylko jedną funkcjonalność i na tym chciałem zakończyć ten "projekt", ale pomyślałem że go trochę rozszerzę, a rozszerzałem go metodą kopiuj-wklej jak widać.
Postaram się zrefaktoryzować kod(o ile to pojęcie w ogóle ma sens w tym przypadku : D ), na początek zastosuję się do twoich rad i wywale niepotrzebny kod, powtarzające się elementy zapakuje w jakieś metody, a później pomyślę jak to sensownie upchnąć w klasach żeby w głównej formie tylko wywoływać odpowiednie metody.
Podejścia obiektowego dopiero się uczę i widzę że sporo przede mną, bo chyba żadnych mechanizmów OOP nie zastosowałem w tym przypadku.

Oczywiście, że to słowo ma tutaj sens, to będzie naprawdę bardzo dogłębna refaktoryzacja. Pochwal się potem kodem, zobaczymy jak Ci poszło. Tylko wrzuć go od razu, żebym się nie musiał bawić w dekompilację. ;) Jakbyś miał jeszcze z czymś problem, to pytaj śmiało. - somekind 2012-02-27 21:23
To w takim razie zabieram się za grzebanie w kodzie. Jeśli uda mi się to jakoś sensownie przerobić to wrzucę kod do oceny. - prisixn 2012-02-27 21:30

Pozostało 580 znaków

2012-02-27 21:39
0

a ja mam pytanie na ile coś takiego jest legalne?
bo miałbym w planach zrobić podobny program tylko że do oglądania seriali (bez zapisywania trwałego na dysk, nic nie byłoby na moich serwerach, program przeszukiwałby tylko istniejące strony z serialami)


Pół giga extra na dropboxie? Pół giga extra na dropboxie! Tyle wygrać! >>Klik here<<
edytowany 1x, ostatnio: unikalna_nazwa, 2012-02-27 21:44

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0