Jump to content
php.lv forumi

Iegūt datus no Facebook par to, kuri lietotāji ir nospieduši Like


SoWhat

Recommended Posts

tad visdrīzāk būšu nošāvis greizi rakstot kodu. Šis ir mans pirmais opjektorientētais PHP skripts:

class fb
{
private $access_token = 'AAACLY4KIvQ0BAEAEnxtMq94zhLYwZBXtfha7LrznvHEK5QZDZD';
private $id = '';
private $type = 'feed';
private function __construct($get)
{
   	$this->id = $get;
}
private function getStuff($id, $type, $access_token)
{
   	$d = file_get_contents("https://graph.facebook.com/$id/$type?access_token=$access_token");
   	$d = json_decode($d, true);
   	return $d;
}
public function echoStuff()
{
   	$temp = $this->getStuff($this->id, $this->type, $this->access_token);
   	foreach ($temp['data'] as $row) {
       	echo '<hr />' . $row['id'] . '<br />';
       	echo $row['message'] . '<br />';
       	$like = $this->getStuff($row['id'], 'likes', $this->access_token);
       	foreach ($like['data'] as $row2) {
           	echo '   -----Like------<br>';
           	echo '   <small>' . $row2['id'] . '</small><br />';
           	echo '   ' . $row2['name'] . '<br />';
       	}
       	$comment = $this->getStuff($row['id'], 'comments', $this->access_token);
       	foreach ($comment['data'] as $row2) {
           	echo '   ---Comment---<br>';
           	echo '   <small>' . $row2['from']['id'] . '</small><br />';
           	echo '   ' . $row2['from']['name'] . '<br />';
           	echo '   ' . $row2['message'] . '<br />';
       	}
   	}
}
}

Link to comment
Share on other sites

Vai tu esi saskaitījis cik reizes viena pieprasījuma laikā tu paprasi Facebook datus caur HTTP? Katrs tavs getStuff funkcijas izsaukums veido jaunu HTTP pieprasījumu.

 

Tu ciklē cauri rezultātus un katrā ciklā taisi vēl divus HTTP pieprasījumus. Vienkārši izsakoties tur arī rodas tās tavas 40 sekundes, ka tu viena sava pieprasījuma laikā veic visticamāk vairākus desmitus pieprasījumu uz FB.

 

P.S. HTTP pieprasījumi ir lēni un ļoti bieži viena no šaurākajām vietām visā sistēmā.

Link to comment
Share on other sites

Kā nav citas izejas? Tu veido liekus pieprasījumus...

 

Tev ir...

 

Tu: Cik ir divi, plus, divi?

Viņš: Četri.

 

Tu: Cik ir divi, plus, divi?

Viņš: Četri.

 

Tu: Cik ir divi, plus, divi?

Viņš: Četri.

 

Tu: Cik ir divi, plus, divi?

Viņš: Četri.

 

Tu: Cik ir divi, plus, divi?

Viņš: Četri.

 

Tu: Cik ir divi, plus, divi?

Viņš: Četri.

 

Skaidrs. Tātad četri.

 

Tev vajadzētu:

 

Tu: Cik ir divi, plus, divi?

Viņš: Četri.

 

Skaidrs. Tātad četri.

Link to comment
Share on other sites

PS. kā izskatās tas kods no OOP viedokļa?

 

No tāda puslīdz nopietna oop tur ir maz. Pirms domā par oop vispirms sāc rakstīt smuku kodu ar normāliem mainīgo nosaukumiem, funkciju, metožu nosaukumiem (ko tu darīsi, ja vajadzēs vēl kādu citu fb pieprasījumu tajā pašā klasē, sauksi metodi par getOTherStuff, vai getStuff2?), saliec smukas atkāpes. Tas, ka tu kodu saliec class definīcijā nenozīmē, ka tu raksti labu oop kodu.

 

Paskaties kaut vai uz veidu, kā tu izmanto klases atribūtus - funkcijas getstuff metodē tu prasi access token kā obligātu parametru, bet tam vienmēr padod pašas klases privāto atribūtu. Nav jēgas no tādas parametru apkārt staipīšanas. Getstuff metodei ir jāizmanto klases atribūts.

 

Pati doma par echostuff stila funkciju ir šķērsām. Klasēs, kurās notiek datu ieguve funkcijām/metodēm dati ir jāatgriež, nevis jāizvada. izvadam ir jābūt ārpus datu ieguves klasēm (palasi par mvc patternu)

Link to comment
Share on other sites

daGreivis, visu nakti prātoju, kā to varētu uzrakstīt ar mazāk pieprasījumiem, bet tā arī pie loģiska rezultāta neesmu nonācis. Vienīgais veids būtu, ja pats feisbooks ļautu tos visus datus iegūt vienā reizē. Vai tas, ko biji domājis ir "Batch Request" ?

 

 

Kaklz, tnx par padomiem!

Edited by SoWhat
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...