рдПрдХ рдкрд╛рдпрдерди рд╕рд╛рдЗрдЯ рдкрд░ рдмрд┐рдЯрдЯреЛрд░реЗрдВрдЯ рдЯреНрд░реИрдХрд░ рдХреЛ рдХреИрд╕реЗ рдлрд╛рд╕реНрдЯ рдХрд░реЗрдВ: рдПрдХреНрд╕рдмреАрдЯреА рдЯреНрд░реИрдХрд░ рдХреЗ рд╕рд╛рде рдПрдХреАрдХрд░рдг

рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдкрд╛рдпрдерди рдореЗрдВ рдПрдХ рд╡реЗрдмрд╕рд╛рдЗрдЯ рд╣реИ рдФрд░ рдЖрдк рдЗрд╕реЗ rutracker.org рдХреА рддрд░рд╣ рдПрдХ рдмрд┐рдЯрдЯреЛрд░реЗрдВрдЯ рдЯреНрд░реИрдХрд░ рд╕рдВрд▓рдЧреНрди рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред

рдХрд╛рд░реНрдп рдЕрд▓рдЧ рдХрд░рдирд╛


рдХрд╛рд░реНрдп рдХреЛ рджреЛ рдмрдбрд╝реА рдХрд╛рд░реНрдпрд╛рддреНрдордХрддрд╛рдУрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
  1. рд╕рд╛рдЗрдЯ рдкрд░ рдзрд╛рд░ рд╡рд┐рддрд░рдг рдХреА рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ (рдРрддрд┐рд╣рд╛рд╕рд┐рдХ рд░реВрдк рд╕реЗ рдЖрдорддреМрд░ рдкрд░ рдПрдХ рдордВрдЪ рдХреЗ рд░реВрдк рдореЗрдВ рд▓рд╛рдЧреВ),
  2. рдЯреНрд░реИрдХрд░ рдЦреБрдж, рд╕реАрдзреЗ рд╡рд┐рддрд░рдг рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реЛрддрд╛ рд╣реИред

рдЯреНрд░реИрдХрд░ рдПрдХ http-рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╣реИ, рдмрд┐рдЯрдЯреЛрд░реЗрдВрдЯ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЗ рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдЧреНрд░рд╛рд╣рдХ рдХреЛ рд╕реВрдЪрд┐рдд рдХрд░рддреЗ рд╣реБрдП, рдЕрдиреБрд░реЛрдз рдкрд░, рд╡рд┐рддрд░рдг рдХреЗ рд╕рднреА рдкреНрд░рддрд┐рднрд╛рдЧрд┐рдпреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВред рдЪреВрдВрдХрд┐ рдЧреНрд░рд╛рд╣рдХ рд▓рдЧрд╛рддрд╛рд░ рд╕рдордп-рд╕рдордп рдкрд░ рдЕрдиреБрд░реЛрдз рднреЗрдЬрддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдЯреНрд░реИрдХрд░ рдХреЛ рдЙрддреНрдкрд╛рджрдХ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП: рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╕рдордп рдиреНрдпреВрдирддрдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

PHP рдХреА рджреБрдирд┐рдпрд╛ рдореЗрдВ, рдХреИрдЯрд▓реЙрдЧ рдФрд░ рдЯреНрд░реИрдХрд░ рдХреЛ рдЕрдХреНрд╕рд░ рджреЛ рд╕рдорд░реНрдкрд┐рдд рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд▓реЛрдХрдкреНрд░рд┐рдп TBDev рдЯреНрд░реИрдХрд░ рдХреИрдЯрд▓реЙрдЧ рдлреЛрд░рдо рдФрд░ рдЯреНрд░реИрдХрд░ рдХреЗ рд╕рдВрдпреЛрдЬрди рдХреЗ рд░реВрдк рдореЗрдВ рдореМрдЬреВрдж рд╣реИред (рд▓реЗрдЦрдХ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЕрдкрдиреЗ рдЖрд╡реЗрджрди рдХреА рд▓реЛрдХрдкреНрд░рд┐рдпрддрд╛ рд╕реЗ рдЗрддрдирд╛ рдердХ рдЧрдпрд╛ рд╣реИ рдХрд┐ рд╕рд╛рдЗрдЯ рдХреЛ рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдЕрдкрдбреЗрдЯ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдЗрд╕рд╕реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдирд╛ рдЕрд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЖрдк рд╡реЗрдм рдкрд░ рдХрдИ рдХреНрд▓реЛрди рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВред)

рдХреБрдЫ рдЯреНрд░реИрдХрд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореВрд▓ рд░реВрдк рд╕реЗ рдкрд╛рдпрдерди рдореЗрдВ рд▓рд┐рдЦреЗ рдЧрдП рдереЗ, рд▓реЗрдХрд┐рди рдлрд┐рд░ рдкреНрд░рджрд░реНрд╢рди рдХрд╛рд░рдгреЛрдВ рд╕реЗ C ++ рдореЗрдВ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ред рдЗрд╕рд▓рд┐рдП рдЗрди рджрд┐рдиреЛрдВ, рдкрд╛рдпрдерди рдЯреНрд░реИрдХрд░ рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реИрдВ (рдХрдо рд╕реЗ рдХрдо рдореБрдЭреЗ рдирд╣реАрдВ рдорд┐рд▓рд╛)ред рдЗрд╕рд▓рд┐рдП, рдХреЗрд╡рд▓ рдПрдХ рдЪреАрдЬ рдмрдЪреА рд╣реБрдИ рд╣реИ рдХрд┐ рд╡рд╣ рдПрдХ рдЕрд▓рдЧ рдЯреНрд░реИрдХрд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░реЗрдВ рдФрд░ рдЗрд╕реЗ рдкрд╛рдпрдерди рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдХреЗ рд╕рд╛рде рдПрдХреАрдХреГрдд рдХрд░реЗрдВред

рдирд┐рдпрдВрддреНрд░рдг рдФрд░ рд╕реБрд░рдХреНрд╖рд╛


рдпрджрд┐ рдЖрдкрдХреЛ рдХрд┐рд╕реА рдирд┐рдпрдВрддреНрд░рдг рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рддреЛ рдпрд╣ рд╣реИ:

рдлрд┐рд░ рдЖрдкрдХреЛ рдмрд╕ рдЙрдирдореЗрдВ рд╕реЗ рд╕рдмрд╕реЗ рд╣рд▓реНрдХрд╛ рдФрд░ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдЙрддреНрдкрд╛рджрдХ рдЪреБрдирдиреЗ рд╡рд╛рд▓реЗ рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЖрдк рдмрд╕ рдЕрдкрдиреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐рдпрд╛рдБ рдмрдирд╛рдиреЗ рдФрд░ рдЕрдкрд▓реЛрдб рдХрд░рдиреЗ рдФрд░ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рдХрд╛ рдЕрд╡рд╕рд░ рджреЗ рд╕рдХрддреЗ рд╣реИрдВред рдкрд╣рд▓реЗ рдЙрдиреНрд╣реЗрдВ рдЕрдкрдиреЗ рдЯреНрд░реИрдХрд░ рдХреЗ рд╕рд╣реА рдШреЛрд╖рдгрд╛ рдкрддреЗ рд╕реЗ рдЕрд╡рдЧрдд рдХрд░рд╛рдпрд╛, рдЬрд┐рд╕реЗ рд╡реЗ рд╡рд┐рддрд░рдг рдмрдирд╛рддреЗ рд╕рдордп .torrent рдлрд╝рд╛рдЗрд▓ рдХреЛ рд▓рд┐рдЦреЗрдВрдЧреЗред

рдпрджрд┐ рдЖрдк рдХрдо рд╕реЗ рдХрдо рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХрд╛ рдирд┐рдпрдВрддреНрд░рдг рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдФрд░ рдЗрд╕рд╕реЗ рднреА рдЕрдзрд┐рдХ, рдЬреИрд╕рд╛ рдХрд┐ рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЖрдк рдХреБрдЫ рд╡рд┐рддрд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕рдореВрд╣реЛрдВ рдХреА рдкрд╣реБрдВрдЪ рдХреЛ рд╕реАрдорд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЗрд╕рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рддрдерд╛рдХрдерд┐рдд "рдирд┐рдЬреА рдЯреНрд░реИрдХрд░" рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ ред

рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ, рдпрд╣ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:

рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди


рдЙрдкрд░реЛрдХреНрдд рд╕рднреА рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП, рдореЗрд░реА рдкрд╕рдВрдж XBT рдЯреНрд░реИрдХрд░ рдкрд░ рдЧрд┐рд░ рдЧрдИ, рдПрдХ рдирд┐рдЬреА рдЯреНрд░реИрдХрд░ рдХреЗ рдПрдХрдорд╛рддреНрд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд░реВрдк рдореЗрдВ, рдЬрд┐рд╕реЗ рдХрд┐рд╕реА рднреА рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рд╕рд╛рдЗрдЯ рдХреЗ рд╕рд╛рде рдПрдХреАрдХреГрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
XBT рдЯреНрд░реИрдХрд░ C ++ рдореЗрдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рд╕реНрд░реЛрдд рд╕реЗ рдирд┐рд░реНрдорд╛рдг рдХрд░рдХреЗ рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред Ubuntu рд╕рд░реНрд╡рд░ 12.04 рдкрд░, 64-рдмрд┐рдЯ рдкрд╣рд▓реА рдмрд╛рд░ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред

рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ

XBT рдЯреНрд░реИрдХрд░ рдХреЗ рд╕рд╛рде рдЗрдВрдЯрд░реЗрдХреНрд╢рди рдХреЛ рдЯреНрд░реИрдХрд░ MySQL рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЧреНрд░рд╣рдг рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдорд╛рд░реЗ Python Directory рдХреЛ MySQL рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЛ рд▓рд┐рдЦрдиреЗ рдФрд░ рдкрдврд╝рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдЗрд╕рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ pymysql рдкреИрдХреЗрдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ред
рдкрд╛рд░реНрд╕ рдФрд░ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдиреЗ рдФрд░ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ BitTorrent-bencode рдкреИрдХреЗрдЬ рдХреА рднреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА
 import bencode, pymysql 

рдХрд╛рд░реНрдпреЛрдВ

рдПрдХ рдЕрдзрд┐рдХреГрдд рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЬреЛрдбрд╝рдирд╛, рдпрджрд┐ рдкрд╣рд▓реЗ рд╕реЗ рдирд╣реАрдВ рд╣реИред рдпрд╣рд╛рдВ, torrent_pass рддрд╛рд▓рд┐рдХрд╛ рдХреЗ torrent_pass рдлрд╝реАрд▓реНрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдЖрдкрдХреА рд╕рд╛рдЗрдЯ рдХреА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЖрдИрдбреА рдФрд░ XBT рдЯреНрд░реИрдХрд░ рдХреА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЖрдИрдбреА рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдкрд╣рд▓реЗ, torrent_pass рдХрд╛ рдЙрдкрдпреЛрдЧ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдШреЛрд╖рдгрд╛ URL рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХреБрдВрдЬреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХреГрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдЕрдм XBT рдЯреНрд░реИрдХрд░ рдПрдХ рдЕрд▓рдЧ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ - рдиреАрдЪреЗ рджреЗрдЦреЗрдВред uid рдлрд╝реАрд▓реНрдб рдСрдЯреЛ-рдЗрдиреНрдХреНрд░реАрдореЗрдВрдЯрд┐рдВрдЧ рд╣реИред
  c = db.cursor() c.execute("SELECT uid, torrent_pass, torrent_pass_version, downloaded, uploaded FROM xbt_users WHERE torrent_pass = %s", (request.user.id,)) rec = c.fetchone() if not rec: # insert a new user c.execute("INSERT INTO xbt_users(torrent_pass) VALUES(%s)", (request.user.id)) c.execute("SELECT uid, torrent_pass, torrent_pass_version, downloaded, uploaded FROM xbt_users WHERE torrent_pass = %s", (request.user.id,)) #rowcount =0 rec = c.fetchone() db.commit() uid, torrent_pass, torrent_pass_version, downloaded, uploaded = rec 

рдПрдХ .torrent рдлрд╝рд╛рдЗрд▓ рдХреЛ рдкрдврд╝рдирд╛ рдФрд░ рдкрд╛рд░реНрд╕ рдХрд░рдирд╛:
  with open(fpath, 'rb') as f: buf = f.read() bt = bencode.bdecode(buf) 

рдирд┐рдЬреА рдзреНрд╡рдЬ рдХреЛ рдмрд▓ рд╕реЗ рд╕реЗрдЯ рдХрд░реЗрдВ рдФрд░ info_hash рдХреА рдЧрдгрдирд╛ рдХрд░реЗрдВ (рдирд┐рдЬреА рдзреНрд╡рдЬ рдХреЛ рд╕реВрдЪрдирд╛ рдЕрдиреБрднрд╛рдЧ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдЗрд╕рдХреЗ рд╣реИрд╢ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддрд╛ рд╣реИ):
  if xbt_force_private: bt['info']['private'] = 1 info_hash_obj = hashlib.sha1(bencode.bencode(bt['info'])) 

рдпрджрд┐ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХреЛрдИ рдирд╣реАрдВ рд╣реИ, рддреЛ рд╡рд┐рддрд░рдг рдХрд╛ рдкрдВрдЬреАрдХрд░рдг xbt_files рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВред
  sha = info_hash_obj.hexdigest() c = db.cursor() c.execute("SELECT flags FROM xbt_files WHERE info_hash=UNHEX(%s)", (sha,)) flag = c.fetchone() if flag is None: c.execute("INSERT INTO xbt_files(info_hash, mtime, ctime) VALUES(UNHEX(%s), UNIX_TIMESTAMP(), UNIX_TIMESTAMP())", (sha,)) db.commit() elif flag[0] % 2 : error_msg(pagename, request, _("Torrent is marked for deletion!")) return 

рдШреЛрд╖рдгрд╛ URL рдХреЗ рд▓рд┐рдП рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдХреБрдВрдЬреА рдЧрдгрдирд╛

XBT рдЯреНрд░реИрдХрд░ рдПрдХ рдмрд╣реБрдд рдореБрд╢реНрдХрд┐рд▓ рдХреБрдВрдЬреА рдЧрдгрдирд╛ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдореВрд▓реНрдпреЛрдВ рдХрд╛ рдПрдХ рд╕реЗрдЯ рд▓рд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:

рдпрд╣ рд╕рдм рд╕рд┐рджреНрдзрд╛рдВрдд рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдорд┐рд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ "рдореИрдВ рдЯреНрд╡рд┐рд╕реНрдЯ рдФрд░ рдЯреНрд╡рд┐рд╕реНрдЯ рдХрд░рддрд╛ рд╣реВрдВ, рдореИрдВ рднреНрд░рдорд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ":
  c.execute("select value from xbt_config where name = 'torrent_pass_private_key'") torrent_pass_private_key = c.fetchone()[0] s = "%s %d %d %s" % (torrent_pass_private_key, torrent_pass_version, uid, info_hash_obj.digest()) sha = hashlib.sha1(s).hexdigest()[0:24] pwd = "%08x%s" % (uid, sha) bt['announce'] = 'http://xbt.host:port/%s/announce' % pwd # remove other trackers if bt.has_key('announce-list'): del bt['announce-list'] 

рдЗрд╕рд╕реЗ xbt_users.torrent_pass_version рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп рд╕реНрдкрд╖реНрдЯ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ: рдЗрд╕ рдорд╛рди рдХреЛ рдмрджрд▓рдХрд░, рдЖрдк рдкрд╣рд▓реЗ рд╕реЗ рдбрд╛рдЙрдирд▓реЛрдб рдХреА рдЧрдИ рд╕рднреА .torrent рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдЕрдорд╛рдиреНрдп рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣реА рд╣реИ, рдпрд╣ рдПрдХ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдкрд╛рд╕рд╡рд░реНрдб рд░реАрд╕реЗрдЯ рдПрдирд╛рд▓реЙрдЧ рд╣реИред
рдФрд░ рдЕрдВрдд рдореЗрдВ, рд╣рдо .torrent рдлрд╝рд╛рдЗрд▓ рдХреЛ рдЙрд╕ рд▓рд╛рдЗрди рдкрд░ рд╡рд╛рдкрд╕ рднреЗрдЬрддреЗ рд╣реИрдВ, рдЬрд┐рд╕реЗ рд╣рдо рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ рднреЗрдЬреЗрдВрдЧреЗ:
  buf = bencode.bencode(bt) 

рд╡рд┐рддрд░рдг рд╣рдЯрд╛рдирд╛

рд╕рдВрд▓рдЧреНрди рдлрд╝рд╛рдЗрд▓ рдХреЛ рд╣рдЯрд╛рддреЗ рд╕рдордп, рд╣рдореЗрдВ рд╡рд┐рддрд░рдг рдХреЛ рдкрдВрдЬреАрдХреГрдд рд╡рд┐рддрд░рдг (рддрд╛рд▓рд┐рдХрд╛ xbt_files ) рдХреА рд╕реВрдЪреА рд╕реЗ рдирд┐рдХрд╛рд▓рдирд╛ рд╣реЛрдЧрд╛ред
рд╡рд┐рдирдореНрд░ рд╣рдЯрд╛рдиреЗ рдХреА рдПрдХ рд╡рд┐рдзрд┐ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рд╣рдо рд╡рд┐рддрд░рдг рдХреЛ рд╣рдЯрд╛рдП рдЧрдП рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕реЗ рдЯреНрд░реИрдХрд░ рджреНрд╡рд╛рд░рд╛ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм рдЗрд╕реЗ рдЕрдВрддрд┐рдо рд╡реНрдпрдХреНрддрд┐ рджреНрд╡рд╛рд░рд╛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
 c.execute("update xbt_files set flags = 1 where info_hash = UNHEX(%s)", (info_hash, )) 


рдЦреИрд░, рдпрд╣ рдмрд╛рдд рд╣реИред рдЖрдЧреЗ рдХреА рд╕рд╛рдЗрдЯ рдШреБрдорд╛: рдбрд┐рд╕реНрдЯреНрд░реАрдмреНрдпреВрдЯрд░реНрд╕ рдХреА рд╕рдВрдЦреНрдпрд╛ рдФрд░ рд╕реВрдЪреА рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдирд╛, рд░реЗрдЯрд┐рдВрдЧ рдЧрд┐рдирдирд╛, рдбрд┐рд╕реНрдЯреНрд░реАрдмреНрдпреВрд╢рди рдореЗрдВ рдлрд╛рдЗрд▓реЛрдВ рдХреА рд╕реВрдЪреА рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдирд╛, рдореБрдЭреЗ рдЕрд▓рдВрдХреГрдд рдХрд░рдирд╛ рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реИред рд╡реЗ рдХрд╛рдлреА рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ: рдЖрдВрдХрдбрд╝реЗ рд╕рд╣рд┐рдд рд╕рднреА рдЖрд╡рд╢реНрдпрдХ рдЬрд╛рдирдХрд╛рд░реА, рдЯреНрд░реИрдХрд░ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдЙрдкрд▓рдмреНрдз рд╣реИ, рдФрд░ рдореИрдВ, рдкрд┐рдпрд░реЗ рдлрд░реНрдордЯ рдХреЗ рдмрд╛рдж, рдЙрди рдкрд░ рдПрдХ рдЬрдЧрд╣ рдмрд░реНрдмрд╛рдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЦреЗрдж рд╣реИред

рдЙрд▓реНрд▓рд┐рдЦрд┐рдд рд╕рдорд╛рдзрд╛рди рд▓реЛрдХрдкреНрд░рд┐рдп рд╡рд┐рдХреА рдЗрдВрдЬрди рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд▓рдЧрдЗрди рдХреЗ рд░реВрдк рдореЗрдВ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ: рдореЛрдЗрдиреЛрдЗрди

рдпрд╣ рдзреНрдпрд╛рди рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рд╕рдорд╛рдзрд╛рди рдореЗрдВ рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдХрдореА рд╣реИ: рдкрд╛рдпрдерди рд╕рдорд░реНрдерди рдХреЗ рд╕рд╛рде рдЖрднрд╛рд╕реА рд╣реЛрд╕реНрдЯрд┐рдВрдЧ рдЖрдо рддреМрд░ рдкрд░ рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рджреБрд░реНрд▓рдн рд╣реИ, рдФрд░ рдореИрдВрдиреЗ рдкреНрд░рдХреГрддрд┐ рдореЗрдВ рд╕реА ++ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдирд╣реАрдВ рджреЗрдЦреА рд╣реИред рдПрдХрдорд╛рддреНрд░ рд╡рд┐рдХрд▓реНрдк, рдпрд╣ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ, рдХреБрдЫ TBDev рдЯреНрд░реИрдХрд░ рдХреНрд▓реЛрди рд▓реЗрдиреЗ рдХреЗ рд▓рд┐рдП рдФрд░ рд╡рд╣рд╛рдБ рд╕реЗ рдПрдХ рдХреЛрдб рд╣реИ рдЬреЛ рд╕реАрдзреЗ рдЯреНрд░реИрдХрд░ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИред

рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдореЗрд░рд╛ рдЕрдиреБрднрд╡ рдХрд┐рд╕реА рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реИред

Source: https://habr.com/ru/post/In175449/


All Articles