Hämta information från The Pirate Bay med hjälp av cURL

PHPportalen Forum Index » Tips och Trix
Lägg ett bokmärke på hela tråden
Skapa nytt inlägg   Svara på inlägget
Visa föregående ämne :: Visa nästa ämne  
Startad av: Meddelande
thedragon



Medlem i: 5706 dagar

Status: Offline



#727752
Inlägg Skrivet: 2012-11-16 21:11      Ämne: Hämta information från The Pirate Bay med hjälp av cURL Citera

Hej.

Jag har länge haft ett öga på den här tråden och har alltid varit sugen på att göra en egen, men har inte haft tid eller haft någon ork till att göra detta - tills i kväll.

Nedan ser ni den kompletta koden och den fungerar för både engelska och svenska varianten av The Pirate Bay, ifall cURL skulle få för sig att hämta från den svenska varianten också (den hämtar från den engelska varianten som standard, har jag märkt). Koden kollar även om webbsidan är nere eller inte.

De regulära uttrycken är dock inte perfekta, så vänligen ha överseende för detta.

Vad jag har läst, är preg_match segare än vad strpos är, men jag kan den förstnämnda funktionen mer, så jag valde att använda mig av den istället.

Koden är fri för eget arbete. Ni får därför leka runt hur mycket ni vill. Lämna gärna kritik om vad ni tycker om det jag har skrapat ihop Smile Jag blev för övrigt precis klar med koden, innan The Pirate Bay slocknade... igen. Typiskt!

Demo: erik-edgren.nu/thepiratebay.php

Uppdatering #1: The Pirate Bay är uppe och rullar igen, så nu funkar demot Smile Jag var tvungen att göra lite småändringar för att få allt att fungera med serverstatusen. Jag förfinade källkoden lite och la till kommentarer som beskriver vad allt gör.

Uppdatering #2: Koden verkar inte fungera som den ska i demot, men det funkar perfekt på min server med exakt samma kod. Jag håller på att se efter vad som kan orsaka problemet.

Uppdatering #3: Nu verkar allt fungera som det ska igen. Har lagt till lite extraknäck så som ett textfält som låter en att ange en valfri direktlänk till någon informations-sida för en torrent på The Pirate Bay.

Uppdatering #4: La till följande tecken till det regulära uttrycket för torrentens titel på The Pirate Bay: , ! ? | /

Uppdatering #5: Jag insåg att det var onödigt att ha 2 adresser när det egentligen bara behövs en enda. Har med andra ord tagit bort $url_website och ändrat $url_direct till enbart $url.

Uppdatering #6: Jag råkade att ta bort filerna för demonstrationen, när jag rensade FTP-servern på filer för några veckor sedan. Jag ber om ursäkt för att demonstrationen inte har varit tillgänglig under den här tiden. Nu är den uppe igen.



Hämtning av information
PHP:
1:
<?php
2:
 
3:
   # KONTROLL: "url" anropas genom en GET och är inte tom
4:
   if(isset($_GET['url']) AND !empty($_GET['url'])) {
5:
      $url $_GET['url'];
6:
 
7:
   # KONTROLL: "url" anropas inte genom en GET
8:
   } else {
9:
      $url 'http://thepiratebay.se/torrent/7760059/CCleaner_3.24.1850';
10:
   }
11:
 
12:
 
13:
   /** ** ** ** ** ** **/
14:
 
15:
 
16:
   # cURL: Hämta status från webbsidans serverstatus
17:
   $status curl_init();
18:
   curl_setopt($statusCURLOPT_URL$url);
19:
   curl_setopt($statusCURLOPT_NOBODYtrue);
20:
   curl_setopt($statusCURLOPT_USERAGENT'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.1) Gecko/20061204 Firefox/2.0.0.1');
21:
   curl_setopt($statusCURLOPT_RETURNTRANSFERtrue);
22:
   curl_setopt($statusCURLOPT_TIMEOUT5);
23:
   curl_exec($status);
24:
 
25:
   $ck_status curl_getinfo($statusCURLINFO_HTTP_CODE);
26:
   curl_close($status);
27:
 
28:
 
29:
   # cURL: Hämta källkoden från den angivna adressen
30:
   $source curl_init();
31:
   curl_setopt($sourceCURLOPT_URL$url);
32:
   curl_setopt($sourceCURLOPT_RETURNTRANSFERtrue);
33:
   curl_setopt($sourceCURLOPT_USERAGENT'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.1) Gecko/20061204 Firefox/2.0.0.1');
34:
   curl_setopt($sourceCURLOPT_REFERER$_SERVER['REQUEST_URI']);
35:
 
36:
   $result curl_exec($source);
37:
   curl_close($source);
38:
 
39:
 
40:
   /** ** ** ** ** ** **/
41:
 
42:
 
43:
   # ARRAY: Hantera de regulära uttrycken
44:
   $regex = Array(
45:
               'title' => '/<div id="title">\n\t\t([a-zA-Z.0-9 _\-\(\)\+\:\[\]\,\!\?\|\/]+)\t<\/div>/',
46:
               'filesize' => '/<dd>([0-9.\&nbsp;\KiB|MiB|GiB]+)&nbsp;\(([0-9\&nbsp;\Bytes]+)\)<\/dd>/',
47:
               'seeders' => '/<dt>([Distributörer|Seeders]+):<\/dt>\n\t\t<dd>([0-9]+)<\/dd>/',
48:
               'leechers' => '/<dt>([Reciprokörer|Leechers]+):<\/dt>\n\t\t<dd>([0-9]+)<\/dd>/',
49:
               'md5hash' => '/<dt>([Info Hash|MD5 Hash]+):<\/dt><dd>&nbsp;<\/dd>\n\t\t([A-Z0-9]+)/',
50:
               'download' => '/<a style=\'background-image: url\("\/\/static\.thepiratebay\.se\/img\/icons\/icon-magnet\.gif"\);\' href="magnet:(.+)" title="Get this torrent">&nbsp;Get this torrent<\/a>/'
51:
              );
52:
 
53:
 
54:
   # MATCHA: Matcha de regulära uttrycke med källkoden
55:
   preg_match($regex['title'], $result$title);
56:
   preg_match($regex['filesize'], $result$filesize);
57:
   preg_match($regex['seeders'], $result$seeders);
58:
   preg_match($regex['leechers'], $result$leechers);
59:
   preg_match($regex['md5hash'], $result$md5hash);
60:
   preg_match($regex['download'], $result$download);
61:
 
62:
?>


Utskriften av informationen
PHP:
1:
<?php
2:
 
3:
   # KONTROLL: Webbsidan är inte mottaglig
4:
   if($ck_status == 200) {
5:
 
6:
 
7:
      # TABELL
8:
      echo '<table width="100%">';
9:
 
10:
      # TABELL: Namn
11:
      echo '<tr>';
12:
         echo '<td align="right" class="table-left" width="100">';
13:
            echo '<b>Namn</b>';
14:
         echo '</td>';
15:
 
16:
         echo '<td align="left" class="table-right">';
17:
            echo $title[1];
18:
         echo '</td>';
19:
      echo '</tr>';
20:
 
21:
 
22:
      # TABELL: Filstorlek
23:
      echo '<tr>';
24:
         echo '<td align="right" class="table-left" width="100">';
25:
            echo '<b>Filstorlek</b>';
26:
         echo '</td>';
27:
 
28:
         echo '<td align="left" class="table-right">';
29:
            echo $filesize[1];
30:
         echo '</td>';
31:
      echo '</tr>';
32:
 
33:
 
34:
      # TABELL: Seeders
35:
      echo '<tr>';
36:
         echo '<td align="right" class="table-left" width="100">';
37:
            echo '<b>Seeders</b>';
38:
         echo '</td>';
39:
 
40:
         echo '<td align="left" class="table-right">';
41:
            echo number_format($seeders[2]);
42:
         echo '</td>';
43:
      echo '</tr>';
44:
 
45:
 
46:
      # TABELL: Leechers
47:
      echo '<tr>';
48:
         echo '<td align="right" class="table-left" width="100">';
49:
            echo '<b>Leechers</b>';
50:
         echo '</td>';
51:
 
52:
         echo '<td align="left" class="table-right">';
53:
            echo number_format($leechers[2]);
54:
         echo '</td>';
55:
      echo '</tr>';
56:
 
57:
 
58:
      # TABELL: MD5-hash
59:
      echo '<tr>';
60:
         echo '<td align="right" class="table-left" width="100">';
61:
            echo '<b>MD5-hash</b>';
62:
         echo '</td>';
63:
 
64:
         echo '<td align="left" class="table-right">';
65:
            echo empty($md5hash[2]) ? '<span class="color-grey">-</span>' $md5hash[2];
66:
         echo '</td>';
67:
      echo '</tr>';
68:
 
69:
 
70:
      # TABELL: Ladda hem
71:
      echo '<tr>';
72:
         echo '<td align="right" class="table-left" width="100">';
73:
            echo '<b>Ladda hem</b>';
74:
         echo '</td>';
75:
 
76:
         echo '<td align="left" class="table-right">';
77:
            echo '<a href="magnet:'.$download[1].'">';
78:
               echo 'Magnet-länk';
79:
            echo '</a>';
80:
         echo '</td>';
81:
      echo '</tr>';
82:
 
83:
      echo '</table>';
84:
 
85:
 
86:
 
87:
 
88:
   # KONTROLL: Webbsidan är mottaglig
89:
   } else {
90:
 
91:
      echo '<div class="message-error">';
92:
         echo 'Det verkar som att The Pirate Bay är för tillfället nere';
93:
      echo '</div>';
94:
 
95:
   }
96:
 
97:
?>


CSS-stilmallen
KOD:
1:
.table-left {
2:
   border-right : 1px solid #eaeaea;
3:
   padding-right : 15px;
4:
}
5:
 
6:
.table-right {
7:
   padding-left : 15px;
8:
}
9:
 
10:
.message-error {
11:
   color : #650505;
12:
   text-align : center;
13:
}
14:
 
15:
.color-grey {
16:
   color : #999999;
17:
}


Senast ändrad av thedragon den 2012-12-21 23:38, ändrad totalt 1 gång
 
Till toppen på sidan
Visa användarprofil Skicka privat meddelande
thedragon



Medlem i: 5706 dagar

Status: Offline



#727785
Inlägg Skrivet: 2012-11-19 05:35      Ämne: Citera

Över 80 visningar och ingen har skrivit något. Är min kod såpass dålig eller uppskattas den ej? :S :/
 
Till toppen på sidan
Visa användarprofil Skicka privat meddelande
wizz



Medlem i: 2361 dagar

Status: Offline



#727790
Inlägg Skrivet: 2012-11-19 09:54      Ämne: Citera

Klart uppskattat..
Tack..
 
Till toppen på sidan
Visa användarprofil Skicka privat meddelande
thedragon



Medlem i: 5706 dagar

Status: Offline



#727791
Inlägg Skrivet: 2012-11-19 10:43      Ämne: Citera

wizz skrev:
Klart uppskattat..
Tack..


Det var mycket roligt att läsa ^^
 
Till toppen på sidan
Visa användarprofil Skicka privat meddelande
Visa tidigare inlägg:   
Skapa nytt inlägg   Svara på inlägget
PHPportalen Forum Index » Tips och Trix
Hoppa till:  
Du kan inte skapa nya inlägg i det här forumet
Du kan inte svara på inlägg i det här forumet
Du kan inte ändra dina inlägg i det här forumet
Du kan inte ta bort dina inlägg i det här forumet
Du kan inte rösta i det här forumet
Du kan inte bifoga filer i detta forum
Du kan inte ladda ner filer från detta forum
Kontakta oss på adressen: info@phpportalen.net
Webbplatsen bygger i grunden på phpBB © 2001, 2002 phpBB Group

Modifieringar har senare gjorts i systemet av PHPportalen
Sid och logotypdesign skapad av Daren Jularic