![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 28 Pomógł: 0 Dołączył: 18.06.2006 Ostrzeżenie: (0%) ![]() ![]() |
Witam!
Obecnie stoję przed problemem / zadniem pobierania dużej (a w sumie to bardzo dużej) ilości danych - mianowicie plików graficznych z innych serwerów. Potrzebują zrealizować pobieranie zdjęć produktów z innych serwisów. Są to setki tysięcy plików graficznych do pobrania - oczywiście nie muszę ich pobrać hurtem wszystkich naraz. Pobieranie tych zdjęć to raczej nieskończony proces (starsze są usuwane, dodawane kolejne) - więc nigdy nie będzie tak, że wszystkie pliki będą pobrane. Powiedzmy, że pliki będą pobierane w kolejności jakiejś tam (np. popularności). Przechodzę do sedna sprawy. Mam adresy URL do owych plików graficznych. Dylemat przed, którym stoję to sposób pobierania plików. Dwie opcje jakie rozważam to funkcja PHP oraz . W obu przypadkach po pobraniu pliku lokalnie - obrabiam i przetwarzam sobie plik. Pytanie, która z opcji będzie bardziej wydajna? Może jest jakaś inna alternatywa? Jest jakiś sposób, aby "nie zamulać serwera" - chodzi mi tutaj o czas oczekiwania na plik z serwera zewnętrznego. Założyłem też rozwiązanie - aby pobierać pliki graficzne w momencie gdy są potrzebne - tj. użytkownik odwiedza stronę, na której są odnośniki do plików graficznych i dopiero wówczas są pobierane - jednakże generowanie takiej strony (za pierwszym razem) jest wówczas dość długie. Drugim rozwiązaniem jest pobieranie zdjęć jako "robot". Czekam na Wasze komentarze, propozycje. |
|
|
![]() |
![]()
Post
#2
|
|
![]() Grupa: Moderatorzy Postów: 8 989 Pomógł: 1550 Dołączył: 8.08.2008 Skąd: Słupsk/Gdańsk ![]() |
curl_multi_init. Tylko asynchronicznie.
-------------------- |
|
|
![]()
Post
#3
|
|
![]() Grupa: Moderatorzy Postów: 15 467 Pomógł: 1451 Dołączył: 25.04.2005 Skąd: Szczebrzeszyn/Rzeszów ![]() |
Cytat Drugim rozwiązaniem jest pobieranie zdjęć jako "robot". A ja bym generował listę URL-i i odpalał Kod wget -i urls.txt IMO wget się trochę lepiej do tego nadaje. [; -------------------- ![]() ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW! |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 28 Pomógł: 0 Dołączył: 18.06.2006 Ostrzeżenie: (0%) ![]() ![]() |
Wget jest rozwiązaniem, które wdrożyłem.
Pytanie tylko jest takie, czy w pliku z którego ma być pobierana lista URL'i można podać w jakiś sposób adres (nazwę docelową) pliku. Przykładowo, mam w pliku adresy: http://www.domena.pl/katalog1/1.jpg http://www.domena.pl/katalog2/1.jpg http://www.domena.pl/katalog3/1.jpg http://www.domena.pl/katalog4/1.jpg mimo, że wszystkie pliki są plikami różnymi zostaną zapisane jako pliki 1.jpg 1.jpg.1 1.jpg.2 1.jpg.3 Czy możliwe jest podanie np. nazwy docelowej w takim pliku: przykładowo: http://www.domena.pl/katalog1/1.jpg -o 1.jpg http://www.domena.pl/katalog1/1.jpg -o 2.jpg Ktoś ma jakieś doświadczenie w tym polu? |
|
|
![]()
Post
#5
|
|
![]() Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
Zacznijmy od tego, że obie metody jakie podałeś, jak i metoda podana przez @erixa robią dokładnie to samo, tj. łączą się ze zdalnym serwerem i wykorzystując protokół HTTP pobierają z niego dane. Innymi słowy to wszystko to w rzeczywistości to samo - jedynie ubrane w inne API.
Utwórz sobie na zdalnym serwerze program / skrypt, który zbuduje jakieś archiwum TAR, ZIP czy jeszcze inne zawierające wszystkie potrzebne dane, tj. przykładowo listę wszystkich obrazów dodanych / usuniętych od czasu ostatniego żądania oraz same pliki graficzne. Później musisz już tylko takie archiwum pobrać, rozpakować i przetworzyć. Oszczędzisz sobie setek bezsensownych żądań HTTP. |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 28 Pomógł: 0 Dołączył: 18.06.2006 Ostrzeżenie: (0%) ![]() ![]() |
Zacznijmy od tego, że obie metody jakie podałeś, jak i metoda podana przez @erixa robią dokładnie to samo, tj. łączą się ze zdalnym serwerem i wykorzystując protokół HTTP pobierają z niego dane. Innymi słowy to wszystko to w rzeczywistości to samo - jedynie ubrane w inne API. Utwórz sobie na zdalnym serwerze program / skrypt, który zbuduje jakieś archiwum TAR, ZIP czy jeszcze inne zawierające wszystkie potrzebne dane, tj. przykładowo listę wszystkich obrazów dodanych / usuniętych od czasu ostatniego żądania oraz same pliki graficzne. Później musisz już tylko takie archiwum pobrać, rozpakować i przetworzyć. Oszczędzisz sobie setek bezsensownych żądań HTTP. Dzięki za odpowiedź. Jednakże nie mogę tego tak zrobić. Ponieważ nie z jednego serwera pobieram dane, a z kilku tysięcy różnych serwerów. Przedstawione rozwiązanie miałoby sens, gdybym pobierał pliki z jednego serwera i/lub z serwera do którego mam "dostęp" - tj. mam możliwość uruchomienia tam jakiś skryptów - a takiej możliwości nie mam. Odświeżam pytane odnośnie wget - zmian nazw pobieranych plików. |
|
|
![]()
Post
#7
|
|
![]() Grupa: Zarejestrowani Postów: 1 798 Pomógł: 307 Dołączył: 13.05.2009 Skąd: Gubin/Wrocław Ostrzeżenie: (0%) ![]() ![]() |
Z tego co pamiętam manuala wget, nie ma on możliwości zmiany nazwy pliku który pobierasz. A zwłaszcza jak pobierasz wiele plików np poprzez wskazanie url do katalogu i pobieranie plików/katalogów rekurencyjnie. Nie mniej, opcja z jakimś prefixem byłaby całkiem fajna.
Ten post edytował by_ikar 6.07.2011, 10:26:01 |
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 365 Pomógł: 8 Dołączył: 16.12.2008 Ostrzeżenie: (0%) ![]() ![]() |
Możesz uruchomić w Bashu skrypt z pętlą, a w każdym jej przebiegu będziesz pobierał coś z serwera i wtedy użyjesz opcji -o nazwa
|
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 14.08.2025 - 04:10 |