CSV dosyasından E-Posta Adreslerini Çekmek [PHP]
Yazar: Orhan Gazi KILIÇ — 2 Aralık 2012 Pazar — Saat: 22:44:00
Bugünlerde bir projeyle uğraşıyordum ve kişinin msn/outlook/windowslive gibi hesaplarından izin verdiği taktirde kişilerinin e-posta adreslerine ulaşmak gibi bir şey gerekti. İşlemi yapacak betiği yazmak için önce kişilerin tutulduğu dosyaya ulaşmam gerekiyordu. Adım adım anlatayım. Hesabımı açıp Kişiler>Yönet>Dışarı Aktar diyerek kişilerimin dulunduğu csv dosyasını indirdim. CTRL+J yapıp indirilenleri gördüm ve bir ayrıntı: dosyanın indirildiği adres mail.live.com/mail/GetContacts.aspx imiş. Burayı projemde kullanacağım, betikte gerekli değil. Her neyse, csv dosyasını bir metin düzenleyici programla açıp yapısını incelediğimde dikkatimi çeken şey kayıtları ";" ile ayrılmış olmasıydı. Başka bir durum da, e-posta adreslerinin 45'inci ; de tutuluyor olmasıydı. Bir başka durumsa ilk 81 kayıt, alanların başlıklarını belirtiyordu. Bunu şöyle kullanabiliriz. İlk önce bu tüm dosyayayı alıp içeriğini ; leri kullanarak ayırırız böylece tüm içerikteki her alan dizinin bir elemanı olur. Bu dizi elemanlarının ilk 81 kaydı alanların başlıkları demiştik. Onları array_splice(); fonksiyonu ile silelim ki, e-postaların tutulduğu her 46'inci kaydı doğru bulabilelim (45-90-135-180...).
Hadi başlayalım işe :) Kodlar biraz kısa basit, ama bunu yazana kadar 12'den akşam 8'e kadar uğraştım (tabi sürekli olarak değil). Yani o yüzden şuncazcık kodu bile anlayamıyorum diye kendinize güveniniz azalmasın. Zaten size kitaplarda, derslerde gösterilen kodların çoğu sandığınızdan çok daha uzun sürede yazılıyor. Üzerinde düşünülüyor, yazılıyor yanlış çıkıyor tekrar yazılıyor gibi... Kodlara bakalım. Açıklamalardan dolayı dolu görünüp gözünüz korkmasın :).
";  //$i ile sıra numarasını belirterek $temizle'nmiş verimizi ekrana yazdırıyoruz. Burası ekrana yazdırma kısmı.
$i++; //sıra numarasını bir arttırıyoruz ki diğer satırı doğru yazsın...
$a+=80;   //ve bir sonraki 80. diziye baktırmak için $a'yı 80 arttırıyoruz. Yani array_slice'ın e-postaların bulunduğu diziye bakmasını sağlıyoruz..
$yaz = fwrite($dosya_ac,$temizle."\r\n");  //fwrite ile de $temizlenmiş halini touch ile oluşturduğumuz dosyamıza yazdırıyoruz.
fclose($ac);  //İşimiz bittiğinde de kapatıyoruz. Olay bu kadar
Not: Kimi e-posta adreslerini tutturamıyor, o yüzden 1-2 tane eksik adresiniz olabilir. Eğer denemek isterseniz buraya tıklayabilirsiniz. Burada göreceğiniz dosya yukardakinden birazcık farklıdır. Farklı olarak sadece deneyebilmeniz açısından dosya seçici ekledim. Belki bir işinize yarar ya da fonksiyonların kullanılmasını öğrenirsiniz. burada bir küçük açıklama daha yapmak istiyorum. Çoğu arkadaşımız fonksiyonları kullanırken parametre ipuçlarına bakmadan yazmaya çalışıyor ve bu da bir süre sonra insanı bıktırıyor. O yüzden fonksiyonları yazarken parametre ipuçlarına bakarak yazmanızı öneririm. notepad++ ta ctrl+üstkarakter(shift)+boşluk kullanarak öğrenebilirsiniz fonskiyon parametrelerini.
Diğer telefon, ad soyad gibi bilgileri de bu mantıkla süzebilirsiniz dosyanın içinden.
Bu arada, yanlış anlaşılma olmasın diye sunucudaki deneyeceğiniz betikten txt dosyasına e-postaları kayıt işlevini kaldırdım. Gönül rahatlığıyla deneyebilirsiniz.
Etiketler: array_slice, array_splice, csv, csv e-mail, csv to email, csv2txt, e-postları ayıklamak, php ile csv dosyalarından e-postaları çekmek, srt_replace, touch()