Advertisement
Guest User

Untitled

a guest
Aug 1st, 2011
3,512
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 3.32 KB | None | 0 0
  1. <?php
  2. include_once('simple_html_dom.php');
  3.  
  4. $email = '[email protected]';
  5. $password = 'jH¡@3_§k__,AS#sd¤82(üasd>ö6223HH>6%/kG.$';
  6. $datafile = 'fbfriends.data';
  7.  
  8. //Behövs om man t.ex. bara kör php-cli (som jag alltså)
  9. date_default_timezone_set('Europe/Stockholm');
  10.  
  11. //Skriv ett meddelande (eller lagra i en databas o.s.v. om man hellre vill det)
  12. function print_message($typ, $meddelande)
  13. {
  14.       echo(date('Y-m-d H:i:s').": $typ: $meddelande\n");
  15. }
  16.  
  17. //Hitta alla vänsidor och vänner rekursivt (inte ofta jag tycker att man ska använda rekursivt men här blev det enklare)
  18. function getFriends($ch, $url)
  19. {
  20.       $friends = Array();
  21.       curl_setopt($ch, CURLOPT_URL, 'http://m.facebook.com'.$url);
  22.       $html = str_get_html(curl_exec($ch));
  23.       $lista = $html->find('div[id=sections]',0)->find('div[class=acw apm]',0)->find('a[class=sec]');
  24.  
  25.       if (empty($lista))
  26.       { //Vi är nestlade till djupet, lägg till vännerna
  27.         foreach($html->find('div[class=ib]') as $friendholder)
  28.           $friends[] = htmlspecialchars_decode($friendholder->children(1)->children(0)->name, ENT_QUOTES); //kovertera också om någon använder cituationstecken i namnet
  29.  
  30.         return $friends;
  31.       }
  32.       else
  33.       { //Vi är inte nestlade till djupet, bäst att gå djupare in
  34.         foreach ($lista as $link)
  35.           $friends = array_merge($friends, getFriends($ch, htmlspecialchars_decode($link->href)));
  36.  
  37.         //Inget mer att hämta, gå upp ett steg
  38.         return $friends;
  39.       }
  40. }
  41.  
  42. //Sätt upp curlen
  43. $ch = curl_init();
  44. curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
  45. curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
  46. curl_setopt($ch, CURLOPT_POST, 1);
  47. curl_setopt($ch, CURLOPT_POSTFIELDS, 'email='.urlencode($email).'&pass='.urlencode($password));
  48. curl_setopt($ch, CURLOPT_COOKIEFILE, 1); //Har glömt bort varför jag kör med 1!? Hade säkert någon bra idé och det fungerar ju uppenbart
  49. curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
  50.  
  51. //Logga in
  52. curl_setopt($ch, CURLOPT_URL,'http://m.facebook.com/login.php');
  53. $html = str_get_html(curl_exec($ch));
  54.  
  55. //Kontrollera att du loggades in genom att se om du kan logga ut
  56. $loggaut = $html->find('a[data-sigil=logout]');
  57. if (empty($loggaut))
  58. {
  59.       print_message('Error', $html->find('div[id=rootContent]',0)->children(0)->children(0)->children(0)->innertext);
  60.       die(1);
  61. }
  62.  
  63. //Hämta alla vänner
  64. $friends = getFriends($ch, '/friends.php');
  65.  
  66. //Logga ut
  67. /* Behövs nog inte igentligen
  68. $loggaut = 'http://m.facebook.com'.$html->find('a[data-sigil=logout]',0)->href;
  69. curl_setopt($ch, CURLOPT_URL, htmlspecialchars_decode($loggaut));
  70. curl_exec($ch);
  71. */
  72.  
  73. //Ta bort curl
  74. curl_close($ch);
  75.  
  76. //Ladda in fil med vänner
  77. if (!file_exists($datafile))
  78. {
  79.       print_message('Info','Hittade ingen gammal data att jämföra med - skapar data för framtida bruk');
  80.       touch($datafile); //Skapa filen om den inte finns
  81. }
  82.  
  83. $prev_friends = unserialize(file_get_contents($datafile));
  84.  
  85. if (!empty($prev_friends))
  86. {
  87.       $diff = array_diff($prev_friends, $friends);
  88.       if (!empty($diff))
  89.       {
  90.         //Skriv ut skilnaderna... jag kör outputen till en fil i crontab...
  91.         foreach($diff as $lost_friend)
  92.           print_message('Förlorad vän', $lost_friend);
  93.       }
  94. }
  95.  
  96. //Spara mina nuvarande vänner för nästa gång
  97. file_put_contents($datafile, serialize($friends));
  98. ?>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement