Archive for the ‘python’ category

Torrent Linker: Update

October 29th, 2010

A while ago I came up with a python script to link torrent newly downloaded torrent files to a folder allowing you to manage data more effectively whilst seeding. However I have only just realised that the initial script does not work as the importer appears to have removed the spaces at the start of each line making the code unusable. As I cannot find my original code here is an update that also features a twitter integration to send you a twitter message when a file has completed.

All you have to do is modify the items inside of “Modify These Variables”, also ensure to set your torrent program to move your completed torrents to the ‘torrentfilesdirectory’ folder

import os
import sys
from commands import getoutput

#Declare Variables
ary_errors    = []
ary_directory = []
ary_tracker   = []
ary_torrent   = []

#Modify These Variables
torrentfilesdirectory = "/torrent/torrentfilescompleted/"
torrent_completed_dir = "/torrent/completed/"
link_directory        = "/torrent/links/"
torrent_move_to_dir   = "/torrent/torrentfilescompletedandlinked/"
twitter_username      = "##########"
twitter_password      = "##########"

#Add list of torrents into variable
torrent_list = getoutput("ls " + torrentfilesdirectory)

#=====================================================
def WorkOnTorrents(line):
 #Read data from torrent
 directory = getoutput("btshowmetainfo \"" + torrentfilesdirectory + line + "\" | grep \"directory name:\"")
 directory = directory + getoutput("btshowmetainfo \"" + torrentfilesdirectory + line + "\" | grep \"file name.....:\"")
 tracker = getoutput("btshowmetainfo \"" + torrentfilesdirectory + line + "\" | grep \"announce url..:\"")

 #Modify the directory variable
 directory = directory.split(": ")[1]

 #Modify the tracker variable
 try:
  tracker = tracker.split("\n")[0].split("/")[2].split(":")[0]
  torrent_valid = "Works"
 except:
  torrent_valid = "Fails"

 print tracker;

 #Add torrent variables to arrays
 if torrent_valid == "Works":
  # Check Against Identified Errors
  if tracker == "":
   ary_errors.append(line);
  else:
   ary_tracker.append(tracker);
   ary_directory.append(directory);
   ary_torrent.append(line);

torrent_list = torrent_list.split("\n")
for line in torrent_list:
 WorkOnTorrents(line)

#=====================================================
## Create Links
print "Executing Links"
for i in range(len(ary_tracker)):
 os.system("curl -u " + twitter_username + ":" + twitter_password + " -d status=\"" + ary_torrent[i] + "\" http://twitter.com/statuses/update.xml")
 print "Creating Link for: " + ary_torrent[i];
 if os.path.exists(link_directory + ary_tracker[i]) == 1:
  os.system("ln -s \"" + torrent_completed_dir + ary_directory[i] + "\" \"" + link_directory + ary_tracker[i] + "/" + ary_directory[i] + "\"")
 else:
  os.system("mkdir " + link_directory + ary_tracker[i])
  os.system("ln -s \"" + torrent_completed_dir + ary_directory[i] + "\" \"" + link_directory + ary_tracker[i] + "/" + ary_directory[i] + "\"")
 os.system("mv \"" + torrentfilesdirectory + ary_torrent[i] + "\" " + torrent_move_to_dir);

#=====================================================
## Display Error Torrents
if len(ary_errors) > 0:
 print "Errors Found:";
 for i in range(len(ary_errors)):
  print ary_errors[i];

Downloading daily TV torrents on ThePirateBay

October 14th, 2010

There are many torrent download scripts online, I even uploaded one a while back, but this one allows you to selectively download episodes that have a date identifier rather than an episode identifier. Once again this is written in python, all you have to do is modify the source variable to contain the search string for your show, create a file in the same folder called downloaded and modify the watch_folder to the folder where you want the torrents to be downloaded to.  Have Fun

import os
import sys
from commands import getoutput
downloaded = getoutput('cat downloaded')
watch_folder = "/torrent/watch/"
source = getoutput('curl -s "http://thepiratebay.org/search/TV%20Show%20XviD/0/0/0" | grep "http://torrents.thepiratebay.org"').split("\n")
for item in source:
    item = item.split('"')[1]
    torrent_link = item
    item = item.split(".")
    date = item[5] + "." + item[6] + "." + item[7]
    if date not in downloaded:
        os.system('cd ' + watch_folder + ' && wget "' + torrent_link + '"')
        os.system('echo "' + date + '" >> downloaded')
        downloaded = getoutput('cat downloaded')

Creating An Overly Simple RSS downloader in Python

February 16th, 2010

I Wrote this script the other day as I was getting more and more annoyed that my version of uTorrent wouldn’t download torrents from torrentbytes for reasons that I still am not sure of. Because of this I created a new script that fits my purpose.

The script is written for the TorrentBytes tracker but you should be able to modify the code to work on other sites too. Anyway here it is

#!/usr/bin/python

#######################################
# RSS Downloader for torrenbytes
# Programmed by Alan MacGregor
#######################################
import os
import sys
from commands import getoutput

###Get Arguments
option = ""
if len(sys.argv) > 1:
 if sys.argv[1] == "-c":
  option =  "check"
 elif sys.argv[1] == "-d":
  option = "download"
else:
 option = "default"

###User Required Variables
cookie_file   = "/home/alan/rss_downloaders/.lynx_cookies"
search_filter = "TV.Show.*720p|" + \
                "Other.TV.Show"
watch_folder  = "/torrent/watch/"
prev_down_loc = "/home/alan/rss_downloaders/torrentbytes_downloaded"
tb_passkey    = "##########################"
tb_username   = "##########################"

def downloadtorrent(torrent_name, link):
 os.system('wget -q --referer=http://www.torrentbytes.net/login.php --cookies=on --load-cookies="' + cookie_file + '" ' + \
           '--keep-session-cookies --save-cookies="' + cookie_file + '" "' + link + '"  -O ' + watch_folder + torrent_name)
 os.system('echo "' + torrent_name + '" >> "' + prev_down_loc + '"')

if option == "download":

 downloadtorrent("Manually_Downloaded_Torrent_File.torrent", sys.argv[2])
 sys.exit()



###Initialise Variables
listoftorrents = ""
previously_downloaded = getoutput('cat ' + prev_down_loc)
rss_feed              = getoutput('curl "http://www.torrentbytes.net/rss.php?passkey=' + tb_passkey + \
                                  '&username=' + tb_username + '&direct" | grep guid').replace("&amp;","&").split("<link>")



for torrent in rss_feed[1:]:
 torrent = torrent.split("</link>")[0].split("\r")

 #fix issue with curl data
 if len(torrent) > 1:
  torrent = torrent[0] + torrent[1].split("\n")[len(torrent) -1]
 else:
  torrent = torrent[0]

 if option == "check":
  print torrent.split("=")[2]

 episodes = search_filter.split("|")
 for episode in episodes:
  items = episode.split("*")
  found = "true"

  for filter in items:
   if filter not in torrent:
    found = "false"

  # Display torrent if all items are matched
  if found == "true":
   listoftorrents = listoftorrents + "|" + torrent

for link in listoftorrents[1:].split("|"):
 if len(link) > 0:
  torrent_name = link.split("&name=")[1]
  if option == "default":
   if torrent_name not in previously_downloaded:
    downloadtorrent(torrent_name)
    print "Downloaded:         " + torrent_name
   else:
    print "Already Downloaded: " + torrent_name
 else:
  print "No Torrents Found in Query"

All you have to do is modify the “###User Required Variables” section along with the cookie file and you should be set. I’d love to here what sites you’ve gotten this to work on plus if you can see where my code might have tried to join the failbus then please leave comments :)

Xbox Achievement HTML Creator Update

November 25th, 2009

Hello all,
I’m currently rewriting the code from scratch, the new code is written in python as its much cleaner than using .net code. The new code has many new features including:
– Multi OS support
– Faster creation of pages (due largely because the program downloads source only rather than leaving an ole to download the full page with flash, images, etc to ensure full data)
– Modular based.. ish (The code will feature a modular system to it meaning that new parts can be added into the code at any time, one feature in the pipelines is a twitter mod that sends out a twitter status update everytime you get a new achievement although there is a rather annoying bug I’m still yet to patch up)
– New graphs (Currently working on the last big graph but its a good one)

The only thing left to do at the moment is to check for consistancy and ensure that all user modifications has a globalised setting

I’ll upload the code at some point in the very near future. To check up on the status get to http://twitter.com/severedspirit, I’m always updating it and I often update on the code progress