Mühendislik her zaman olanı kullanmak ve değiştirmek değil; bazen özel ihtiyaçlara özel çözümler sunabilmektedir. Bu makalede Facebook’a gelen bir mesajın nasıl sms olarak cep telefonuna iletilebileceğini katmanları ile anlatmaya çalışacağım.
Bir özel ihtiyaçtan ortaya çıkmış bir projemi anlatacağım. Facebook gençlerde kullanım oranı yüksek olan bir sosyal paylaşım platformu. Bu platform aracılığı ile mesaj gelince bundan mümkün oldukça hızlı haberdar olmak istiyorum. Ama Cep Telefonun Nokia 1100 olduğundan değil facebook uygulaması internet vb girmesi bile hayal.
O zaman ilk planımı yaptım; Facebook’dan bilgiyi alıp, bir gsm firmasının api’sini kullanarak sms atmak olacak.
Aşama1 ) Facebook’dan bilgi alma (Projenin 1.Katmanı)
Facebook’un login sistemi
$a = cURL(“https://login.facebook.com/login.php?login_attempt=1″,true,null,”email=$EMAIL&pass=$PASSWORD”);
şeklinde çalışıyor olsa bile; siz bunu denedinizde çalışmadığını göreceksiniz. Çünkü bü tur bot’lara karşı facebook her girişde cookie desteği istemekte ve birçok ayar yapmanız gerekmektedir. DaniWeb’den* bulduğum php curl ile facebooK’a bağlanma kodu epey işime yaradı. Tamamı şudur;
/* EDIT EMAIL AND PASSWORD */
$EMAIL = “faceemail”;
$PASSWORD = “şifre”;function cURL($url, $header=NULL, $cookie=NULL, $p=NULL)
{
$ch = curl_init();
curl_setopt($ch, CURLOPT_HEADER, $header);
curl_setopt($ch, CURLOPT_NOBODY, $header);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_COOKIE, $cookie);
curl_setopt($ch, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_ENCODING, ‘ISO-8859-9′);
if ($p) {
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, “POST”);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $p);
}
$result = curl_exec($ch);if ($result) {
return $result;
} else {
return curl_error($ch);
}
curl_close($ch);
}$a = cURL(“https://login.facebook.com/login.php?login_attempt=1″,true,null,”email=$EMAIL&pass=$PASSWORD”);
preg_match(‘%Set-Cookie: ([^;]+);%’,$a,$b);
$c = cURL(“https://login.facebook.com/login.php?login_attempt=1″,true,$b[1],”email=$EMAIL&pass=$PASSWORD”);
preg_match_all(‘%Set-Cookie: ([^;]+);%’,$c,$d);
for($i=0;$i<count($d[0]);$i++)
$cookie.=$d[1][$i].”;”;/*
NOW TO JUST OPEN ANOTHER URL EDIT THE FIRST ARGUMENT OF THE FOLLOWING FUNCTION.
TO SEND SOME DATA EDIT THE LAST ARGUMENT.
*/
$bizimhttp= cURL(“https://www.facebook.com/messages/?action=read&tid=ojadadadDAiiwxKA”,null,$cookie,null);
$bizimhttp dediğim mesajların bulunduğu sayfanın kendisi. şimdi ise bana son mesaj lazımdı. Her kullanıcının unique bir id’si var ve ben bunu kullanarak aşağıdaki kod ile kullanıcını son attığı mesajı ve id’sini buldum.
$pos = strripos($bizimhttp, “100001x64287_id”);
$pos2 = substr($bizimhttp,$pos);
$pos3 = substr($pos2,0,30); //mesaj id’si
$pos4 = substr($pos2,232,270); //mesajın kendisi
Aşama 2 ) Mesaj Yeni mi?
$con = mysql_connect(“localhost”,”dbname”,”şifre”);
if(!$con)
{
die(‘Veritabani Baglanti Hatasi’);
}else{
mysql_select_db(“dbname”,$con);$kontrol = true;
$getrecodr =”Select record from register where record=’$pos3′”;
$result = mysql_query($getrecodr);
while($row = mysql_fetch_array($result))
{
$kontrol=false;
}
if($kontrol==true){
//yeni mesaj gelmiş
$insertregister =”INSERT INTO register (record) VALUES(‘$pos3′)”;
mysql_query($insertregister);
echo “yeni mesaj var”;
Aşama 3 ) SMS Gönderme (Projenin 2. Katmanı)
function XMLPOST($PostAddress,$xmlData)
{
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$PostAddress);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,1);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch, CURLOPT_HTTPHEADER, Array(“Content-Type: text/xml”));
curl_setopt($ch, CURLOPT_TIMEOUT, 30);
curl_setopt($ch, CURLOPT_POSTFIELDS, $xmlData);
$result = curl_exec($ch);
return $result;
}
$xml='<?xml version=”1.0″ encoding=”iso-8859-9″?>
<mainbody>
<header>
<company>NETGSM</company>
<usercode>telefonno</usercode>
<password>şifre</password>
<startdate></startdate>
<stopdate></stopdate>
<type>1:n</type>
<msgheader>AHMETMUNGEN</msgheader>
</header>
<body>
<msg><![CDATA[Mesaj VAR! Mesaja bak! ]]></msg>
<no>gidecekno</no>
</body>
</mainbody>';
$gelen=XMLPOST(‘http://api.netgsm.com.tr/xmlbulkhttppost.asp’,$xml);
Aşama 4 ) Sistemi Tetikleme (Projenin 3.katmanı)
Bu noktada sonra proje yaklaşık 1 ay kadar uzadı; Bunun bir nedeni ilgilenemem diğer nedeni ise çıkan sorundu.
Şöyleki yazdığımız cookie api’si webcrown’un sisteminde aktif hale gelmiyor; çünkü webcrown program ile post atıyor. Tarayıcı tanınamadı diye facebook cookie vermiyor ve sisteme giriş yapılamıyordu.
Aşama 5 ) Sistemi Tetikleme’de yardımcı etken (Projenin 4.katmanı)
böylece netrendered benim webistemdeki index-h2.php isimli dosyayı çalıştırıyordu ve tetikleme gerçekleştirilmiş oluyor.
Projenin testi ise bu yazı yazıldığı gün yapıldı ve çalışmaktadır. Projeye ise IBM staj günlerimde başlamıştım.
Projede Halen Geliştirilecek Noktalar
- Facebook’dan seri olarak onun ve benim mesajlaştığım zamanda sms atacak mı? (şuan itibari ile 15 dk içinde max tek sms attığı için çok etkilemesede sorun
- Mesajın içeriği ile ilgili bilgi verilebilir mi?
Teşekkürler
Proje’de sona ulaşmak önemlidir. ve Allah nasip etti ve bende ulaştım. Bu proje bundan sonra kullanılsın veya kullanılmasın proje sürecinde öğrendiklerim benle kalacaktır.
Kaynakça
**Benim kullandığım http://www.mywebcron.com/
***http://netrenderer.com (browse shoots sitesi) (hayatımı kurtardın!)
***Alıntıdır.amungen.wordpress.com
Hiç yorum yok:
Yorum Gönder