Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Optymalizacja wyciągania ciągu z ciągu url
TheBlackJJoker
post
Post #1





Grupa: Zarejestrowani
Postów: 24
Pomógł: 0
Dołączył: 21.01.2014

Ostrzeżenie: (0%)
-----


Cześć. Aktualnie robię stronkę, która pobiera dane z API w formie JSON'a.
Użytkownik podaje swój nick, lub link do swojego profilu, który może być w dwóch formach, tj. http://steamcommunity.com/id/<nick lub id>/ i http://steamcommunity.com/profiles/<nick lub id>/ .
Jeżeli podaje nick, to kod leci dalej bez zmian. Jeżeli wykryje, że ciąg znaków składa się z url to wtedy ma wyjąć nick lub id profilu.
Kod działa, ale czasem lubi świrować, tj. api zwraca kod 400 (bad request), a gdy nick się nie zgadza powinien zwracać kod 404. Więc wydaje mi się, że coś tutaj jest źle.
Proszę o pomoc, może ogarnięcie tego od nowa.

Pozdrawiam.



  1. if(isset($_GET['n']) && isset($_GET['p'])){
  2. if($_GET['p'] == 1){
  3. if(strpos($_GET['n'], "steamcommunity.com/id/") === false){
  4.  
  5. }
  6. else{
  7. $b = str_replace("/", "", $_GET['n']);
  8. $c = explode("steamcommunity.comid",$b);
  9. return header("Location: player.php?n=".$c[1]."&p=".$_GET['p']);
  10.  
  11. }
  12.  
  13. if(strpos($_GET['n'], "steamcommunity.com/profiles/") === false){
  14.  
  15. }
  16. else{
  17. $e = str_replace("/", "", $_GET['n']);
  18. $f = explode("steamcommunity.comprofiles",$e);
  19. return header("Location: player.php?n=".$f[1]."&p=".$_GET['p']);
  20.  
  21. }
  22. }
  23. }
Go to the top of the page
+Quote Post
Tomplus
post
Post #2





Grupa: Zarejestrowani
Postów: 1 879
Pomógł: 230
Dołączył: 20.03.2005
Skąd: Będzin

Ostrzeżenie: (0%)
-----


A nie możesz użyć wyrażeń regularnych?

Np.
  1. $url = 'http://steamcommunity.com/profiles/76561198121038823/';
  2. preg_match('/\/(id|profiles)\/([\w\d\-\_]+)\//', $url, $wynik);
  3. ID z `{$wynik[1]}` to: {$wynik[2]}
  4. ";


Potem taki wynik przetwarzasz jak chcesz. Z tego co sprawdziłem, to są dwa rodzaje URLi do profilu:

- /id/ gdzie jest numer lub nazwa
- /profiles/ gdzie jest tylko numer ID użytkownika

Go to the top of the page
+Quote Post
TheBlackJJoker
post
Post #3





Grupa: Zarejestrowani
Postów: 24
Pomógł: 0
Dołączył: 21.01.2014

Ostrzeżenie: (0%)
-----


Dzięki za pomoc. Usprawniłem to co napisałeś. Zrobione. Dzięki.

  1. if(strstr($_GET['n'], "steamcommunity.com")!==False){
  2. $wynik = preg_split("/(id|profiles)/", $_GET['n']);
  3. $wynik[1] = str_replace("/", "", $wynik[1]);
  4. }


Ten post edytował TheBlackJJoker 27.09.2017, 12:05:29
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 23.08.2025 - 23:31