Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: cURL, Jnson - zmiana nazwy na angielski
Forum PHP.pl > Forum > PHP
smykus1991
Mój pierwszy post, tak więc proszę o wyrozumiałość smile.gif.

Witam wszystkich. Mam mały problem z którym nie jestem sobie w stanie poradzić. Otóż:
W adresie :
http://worldoftanks.eu/uc/clans/500009693-...ces/?type=table
umieszczone są między tym wygenerowanymi danymi polskie nazwy. W momencie gdy chcę z wykorzystaniem php z pomocą cURL skopiować to Jnsona w niewyjaśniony przezemnie sposób zmienia się to wszystko co jest po polsku na angielskie nazwy:
http://www.stats.worldoftanks.pro/prowincje.php
tutaj kopiuje to ca pomocą cURL na swoje potrzeby. Może mi ktoś to wyjaśnić? Będę wdzięczny.
Poniżej umieszczam kod, którym kopiuję wyniki ze strony pierwszej na stronę drugą:
  1.  
  2. <?php
  3.  
  4. if(!function_exists("curl_init")) die("cURL extension is not installed");
  5.  
  6. $url = 'http://worldoftanks.eu/uc/clans/500009693-CARA/provinces/?type=table';
  7.  
  8. $headers = array(
  9. "User-Agent: Mozilla/5.0 (Windows NT 6.2; WOW64; rv:18.0) Gecko/20100101 Firefox/18.0",
  10. "Accept-Language: pl,PL-pl;");
  11. $ch = curl_init();
  12. curl_setopt($ch, CURLOPT_URL,$url);
  13. curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  14. curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
  15.  
  16. $result = curl_exec( $ch );
  17. curl_close( $ch );
  18. $return = json_decode($result, true);
  19.  
  20.  
  21.  
  22. echo $result;
  23. ?>
nospor
W linku źródłowym, co podałes, nazwy zwracane są po angielsku.
Jeśli tobie są zwracane po polsku to pewnie masz tam swoje konto, jestes zalogowany, i określiłeś ze chcesz po polsku. Dlatego tobie akurat zwraca po polsku. Jak ktoś nie jest zalogowany, jak ja, to dostaje po angielsku.
Gdy ślesz cURL, to też nie jesteś zalogowany więc też dostajesz po angielsku. Proste.
smykus1991
Czyli, aby mieć możliwość zrzucania tego po polsku muszę w kodzie zalogować się jako polski urzytkownik? Czy nie ma innej metody na pominięcie tego etapu? Bardzo mi zależy aby nazwy, którę są generowane po angielsku były przeze mnie kopiowane po polsku bez konieczności logowania.
nospor
No przecież masz tam konto, prawda? No to możesz przy pomocy curl się zalogować bez problemu

Cytat
Czy nie ma innej metody na pominięcie tego etapu?
No to musisz się już ich pytac, czy istnieje inna możliwość powiedzenia im, że chcesz język polski bez koniecznosci logowania.
smykus1991
http://worldoftanks.eu/uc/clans/500009693-...amp;language=pl
http://worldoftanks.eu/uc/clans/500009693-...amp;language=fr
http://worldoftanks.eu/uc/clans/500009693-...amp;language=de

Do języka można odnieść się tak - u mnie bynajmniej działa.
Mam natomiast kolejne pytanie: dlaczego po umieszczeniu takiego linku w przeglądarce działa mi wszystko pięknie, natomiast w momencie, gdy wrzucam któryś z tych linków do cURL nie działa poprawnie (zwraca mi pustą wartość). Proszę mi wyjaśnić co jest tego powodem i jak uzyskać polski język w php z tych linków.
nospor
No widać, że faktycznie odwołując się przez cURL oni nic nie zwracają...totalnie nic... Może brakuje jakiegoś nagłówka, który jest sprawdzany gdy jest podany language...
smykus1991
Dla mnie najważniejszym pytaniem jest dlaczego to nie działa? Jakiego nagłowku może brakować. Ciężko odnaleźć mi sposób na obejście tego. Próbowałem jak Mówiłeś poprzez logowanie lecz wynik w dalszym ciągu zwracany jest po anielsku, a nie po polsku. Będę wdzięczny za jakąkolwiek pomoc.

Zrzuciłem nagłówki za pomocą cURL:
http://worldoftanks.eu/uc/clans/500009693-...amp;language=pl
Wynik dla adresu podanego powyżej:
HTTP/1.1 302 FOUND Server: nginx Date: Tue, 12 Feb 2013 09:05:02 GMT Content-Type: text/html; charset=utf-8 Content-Length: 0 Connection: keep-alive Keep-Alive: timeout=15 Vary: Accept-Language,Cookie X-Frame-Options: SAMEORIGIN Content-Language: pl Set-Cookie: hlauth=; expires=Thu, 01-Jan-1970 00:00:00 GMT; Max-Age=0; Path=/ Set-Cookie: sessionid=7e88a338b4ef0e5e2d31748cd39dfc34;
expires=Tue, 26-Feb-2013 09:05:02 GMT; httponly; Max-Age=1209600; Path=/Location: http://worldoftanks.eu/uc/clans/500009693-...ces/?type=table

http://worldoftanks.eu/uc/clans/500009693-...ces/?type=table
Wynik dla adresu powyżej:
HTTP/1.1 200 OK Server: nginx Date: Tue, 12 Feb 2013 09:07:34 GMT Content-Type: application/x-javascript; charset=utf-8 Transfer-Encoding: chunked Connection: keep-alive Keep-Alive: timeout=15 Vary: Accept-Encoding Vary: Accept-Language,Cookie X-Frame-Options: SAMEORIGIN Content-Language: en Set-Cookie: hlauth=; expires=Thu, 01-Jan-1970 00:00:00 GMT; Max-Age=0; Path=/ Set-Cookie: sessionid=e9f22fd3d075ed2f72cde4d769dfea99; expires=Tue, 26-Feb-2013 09:07:34 GMT; httponly; Max-Age=1209600; Path=/

W momencie gdy w adresie dopisuje &language=pl Content-Language zmienia się na PL. W tym drugim przypadku pozostaje EN. Proszę mi wyjaśnić co zrobić aby wyświetlało się to wszystko po polsku.
Dodałem nawet header:
  1. header('Content-language: pl');
, lecz to nic nie zmienia.
nospor
Cytat
Próbowałem jak Mówiłeś poprzez logowanie lecz wynik w dalszym ciągu zwracany jest po anielsku, a nie po polsku. Będę wdzięczny za jakąkolwiek pomoc.
Jesteś pewien, że się poprawnie zalogowałes? Że logowanie zakończyło się sukcesem? I że kolejny cURL idzie z zapamiętanym zalogowaniem?
smykus1991
To że się zalogowałem jestem pewien. Nie jestem jednak pewien co do zapamiętania przy następnym cURL. Mogę prosić o jakąś podpowiedź?

Dodam że loguję się tak:
  1. $c = curl_init();
  2. curl_setopt($c, CURLOPT_URL, 'http://worldoftanks.eu/auth/new/?next=/');
  3. curl_setopt ($c, CURLOPT_REFERER, "http://worldoftanks.eu/");
  4. curl_setopt($c, CURLOPT_POST, true);
  5. curl_setopt($c, CURLOPT_POSTFIELDS, 'login=****&password=****');
  6. curl_setopt($c, CURLOPT_RETURNTRANSFER, 1);
  7. curl_setopt($c, CURLOPT_COOKIEFILE, '.cookie.txt');
  8. curl_setopt($c, CURLOPT_COOKIEJAR,'.cookie.txt');
  9. $page = curl_exec($c);
  10. curl_close($c);
nospor
No musisz w następnym curl przekazywać ciastko. Jest to opisane w manualu.
Musisz używać takich opcji jak: CURLOPT_COOKIEJAR czy CURLOPT_COOKIEFILE
smykus1991
  1. <meta name="language" content="pl"><html lang="pl">
  2. <?php
  3.  
  4. if(!function_exists("curl_init")) die("cURL extension is not installed");
  5.  
  6. header('Content-type: utf-8');
  7. $headers = array("User-Agent: Mozilla/5.0 (Windows NT 6.2; WOW64; rv:18.0) Gecko/20100101 Firefox/18.0","Content-Language: pl,PL-pl;");
  8. $url = 'http://worldoftanks.eu/uc/clans/500009693-CARA/provinces/?type=table';
  9.  
  10. $c = curl_init();
  11.  
  12. $c = curl_init();
  13. curl_setopt($c, CURLOPT_URL, 'http://worldoftanks.eu/auth/new/?next=/');
  14. curl_setopt ($c, CURLOPT_REFERER, "http://worldoftanks.eu/");
  15. curl_setopt($c, CURLOPT_POST, true);
  16. curl_setopt($c, CURLOPT_POSTFIELDS, 'login=login&password=*****');
  17. curl_setopt($c, CURLOPT_RETURNTRANSFER, 1);
  18. curl_setopt($c, CURLOPT_COOKIEFILE, '.cookie.txt');
  19. curl_setopt($c, CURLOPT_COOKIEJAR,'.cookie.txt');
  20. $page = curl_exec($c);
  21. curl_close($c);
  22.  
  23. //echo 'Wynik: <br>' .$page;
  24.  
  25. $headers = array(
  26. "User-Agent: Mozilla/5.0 (Windows NT 6.2; WOW64; rv:18.0) Gecko/20100101 Firefox/18.0",
  27. "Content-Language: pl,PL-pl;");
  28. $ch = curl_init();
  29. curl_setopt($ch, CURLOPT_URL,$url);
  30. curl_setopt($ch, CURLOPT_COOKIEJAR, 'cookies.txt');
  31. curl_setopt($ch, CURLOPT_COOKIEFILE, 'cookies.txt');
  32. curl_setopt($ch, CURLOPT_RETURNTRANSFER, 2);
  33. curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
  34. curl_setopt($ch, CURLOPT_HEADER, 0);
  35. curl_setopt($ch, CURLOPT_NOBODY, 0);
  36. echo $return;
  37. $result = curl_exec( $ch );
  38. curl_close( $ch );
  39. $return = json_decode($result, true);
  40.  
  41. echo $result;
  42. ?>


Jeśli to powinno wyglądać tak to niestety - nic się nie zmieniło sad.gif.
nospor
raz ciacho nazywasz .cookie.txt a raz cookie.txt
Zdecyduj sie.

Kolejna sprawa: no ale sprawdz, czy poprawnie przekazujesz zalogowanie. Po zalogowaniu, odpal strone curl taką, na której jest napisany twoj login. Wówczas bedziesz wiedzial czy opanowales sztukę logowania i pamietania zalogowania przy pomocy curl
smykus1991
Ok nazwe plików cookie już ustaliłem smile.gif. Mam natomiast inne pytanie. Czy:
  1. curl_setopt($c, CURLOPT_URL, 'http://worldoftanks.eu/auth/new/?next=/');

Czy adres podany w tym miejscu jest poprawny? Jak to sprawdzić.
nospor
Cytat
Czy adres podany w tym miejscu jest poprawny? Jak to sprawdzić.
Spójrz co dostajesz jako odpowiedź smile.gif
smykus1991
Wszelakie próby mojej pracy są tutaj. Jeśli możesz spójrz prosę.

http://www.stats.worldoftanks.pro/prowincje.php

Jeśli to jest to powinno być pokazane po polsku. A wyświetla się po angielsku.

OK po polsku mi się wyświetla. Tylko nadal mam problem z zalogowaniem. Tak więc jeśli Możesz poproszę o pomoc w tym kierunku.

Albo spytam się inaczej - czy da się uprościć ten zapis:
  1. $c = curl_init();
  2. curl_setopt($c, CURLOPT_URL, 'http://worldoftanks.eu/auth/new/?language=pl&next=worldoftanks.eu');
  3. curl_setopt($c, CURLOPT_POST, true);
  4. curl_setopt($c, CURLOPT_RETURNTRANSFER, 1);
  5. curl_setopt($c, CURLOPT_COOKIEFILE, 'cookie.txt');
  6. curl_close($c);

do pobrania samego ciasteczka?
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.