Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [funkcja]Pobieranie danych z eksportu kontaktów z GG, php 4, php 5
Trobin
post 11.05.2008, 16:10:14
Post #1





Grupa: Zarejestrowani
Postów: 82
Pomógł: 6
Dołączył: 23.03.2008
Skąd: Szczecin

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


Dzisiaj potrzebowałem do swojego projektu takiej pierdółki jak wyciąganie z eksportu kontaktów Gadu - Gadu danych o kontakcie. Napisałem taką oto funkcję:
  1. <?php
  2. function fromGG($contact){
  3. $pattern='/;*(^[a-zA-ZźćśńąęłżŹĆŚŃĄĘŁŻ"'^[0-9]+)*;*(^[a-zA-ZźćśńąęłżŹĆŚŃĄĘŁŻ"'s*^[0-9]+)*;*([a-zA-ZźćśńąęłżŹĆŚŃĄĘŁŻ"'s*^[0-9]+)*;*([a-zA-ZźćśńąęłżŹĆŚŃĄĘŁŻ"'s*^[0-9]+)*;*(+48[0-9]+)*;*([a-zA-Zs*]+)*;*([0-9]+)*/';
  4. $contact=preg_match ($pattern, $contact, $contact_data);
  5. return $contact_data;
  6. }
  7. ?>

Funkcja zwraca w wyniku tablicę z określonymi danymi:
  1. <?php
  2. $contact_data['1'] //Imię
  3. $contact_data['2'] //Nazwisko
  4. $contact_data['3'] //Pseudo
  5. $contact_data['4'] //Nazwa wyświetlana
  6. $contact_data['5'] //Numer komórki
  7. $contact_data['6'] //Grupa do której należy kontakt
  8. $contact_data['7'] //Najważniejsze - numer Gadu - Gadu
  9. ?>

Przykład:
I.
Cytat
Imię;Nazwisko;Pseudo;Wyświetlanie;+480000;Grupa;5836987;email@wp.pl;0;;0;;0;1111

Tak wyeksportowany kontakt w wyniku da:
Cytat
Array (
[0] => Imię;Nazwisko;Pseudo;Wyświetlanie;+480000;Grupa;5836987;
[1] => Imię
[2] => Nazwisko
[3] => Pseudo
[4] => Wyświetlanie
[5] => +480000
[6] => Grupa
[7] => 5836987 )

II.
Bardzo często zdarza się tak, że w edycji kontaktu nie wpisujemy imienia bądź nazwiska. Taki kontakt:
Cytat
;;Pseudo;Wyświetlanie;+480000;Grupa;5836987;email@wp.pl;0;;0;;0;1111

Da w efekcie:
Cytat
Array (
[0] => ;;Pseudo;Wyświetlanie;+480000;Grupa;5836987
[1] =>
[2] =>
[3] => Pseudo
[4] => Wyświetlanie
[5] => +480000
[6] => Grupa
[7] => 5836987 )


ISTOTNE: numer telefonu MUSI rozpoczynać się od +48 - inaczej wzorzec dla numeru telefonu będzie pasował też dla numeru gg i kolejność się zmieni. W najbliższym czasie postaram się to dopracować.

Być może komuś się przyda smile.gif

Ten post edytował Trobin 11.05.2008, 16:39:33


--------------------
Pracuję na: Apache 2.2.4, MySQL 5.0.20a, PHP 5.3.0
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 2)
klocu
post 11.05.2008, 16:45:37
Post #2





Grupa: Zarejestrowani
Postów: 291
Pomógł: 45
Dołączył: 21.08.2007

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


Jak dla mnie to zawracanie kijem Wisły.
Parsujesz jeden kontakt i zaprzęgasz do tego prega. Można i tak, ale gdybym potrzebował sparsować cały plik zrobi się bałagan. (zamieniając preg_match na preg_match_all). A jeśli puścisz w pętli i trafisz na zapis wersji (linia pierwsza dla GG7) albo ignorowane kontakty?
Zmuszasz po części ludzi do formatowania danych w/g tego jak Twoja funkcja je sparsuje.
Działaj odwrotnie - to Ty dopasuj się do dziwactw wymyślanych przez ludzi.
Ja proponuje coś skleconego na szybko (czyli wersja 0.0.1 :]):
  1. <?php
  2. function gg_contact_list( $file ) {
  3.  
  4. if( !file_exists( $file ) ) return "brak pliku";
  5.  
  6. $return_array = array();
  7. $temp = explode( "r\n", implode( file( $file ) ) );
  8.  
  9. for( $i=0; $i<=count( $temp ); $i++ ) {
  10. $linia = explode( ";", $temp[$i] );
  11. if( $linia[6] and $linia[3] ) { $return_array[] = $linia; }
  12. $linia=null;
  13. }
  14.  
  15. return $return_array;
  16.  
  17. }
  18.  
  19. print_r( gg_contact_list( 'kontakty.txt' ));
  20.  
  21. ?>

Z drugiej strony, mógłbym powiedzieć że wkładanie do tablicy wynikowej pustych wpisów nie ma sensu ale, aby zachować strukturę parsowanych danych warto to zrobić.

Ten post edytował klocu 11.05.2008, 16:51:42
Go to the top of the page
+Quote Post
Trobin
post 11.05.2008, 18:27:18
Post #3





Grupa: Zarejestrowani
Postów: 82
Pomógł: 6
Dołączył: 23.03.2008
Skąd: Szczecin

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


Jakie to piękne jak kilka czyiś linii kodu i to pisanych na szybko niszczy twoje kilkanaście... biggrin.gif
Docelowo to zamiast dawania tylko stringa miało być podawanie jako atrybutu pliku z kontaktami, puszczenie w pętle i wstawianie do bazy (w moim projekcie odbywa się to jednorazowo i to na localhoscie, więc wydajność nie jest dla mnie najważniejsza winksmiley.jpg ). Mówiąc szczerze to myślałem nad explode, ale jakoś nie mogłem tego zwizualizować i dlatego pomyślałem: wezmę preg i potraktuje to jako dobry moment na naukę wyrażeń regularnych winksmiley.jpg .
Cytat
Z drugiej strony, mógłbym powiedzieć że wkładanie do tablicy wynikowej pustych wpisów nie ma sensu ale, aby zachować strukturę parsowanych danych warto to zrobić.

W sumie masz rację smile.gif postaram się udoskonalić swoja "funkcję" i przedstawić wynik winksmiley.jpg .

Ten post edytował Trobin 11.05.2008, 18:28:44


--------------------
Pracuję na: Apache 2.2.4, MySQL 5.0.20a, PHP 5.3.0
Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 19.07.2025 - 15:03