我有一些我想解码的代码,但是如果正在使用任何代码页,猜测代码页的运气就不会很幸运。任何帮助将非常感激。
这是代码:
exec("import re;import base64");exec((lambda p,y:(lambda o,b,f:re.sub(o,b,f))(r"([0-9a-f]+)",lambda m:p(m,y),base64.b64decode("OTIgMjEsOTQsMTQsYywxMTcsMTEsMTA2LDNhLDJmLDRmLDhlCmVmIGUyLjEzZC5iZCA5MiBhMAplZiBjOSA5MiA3MwoKM2UgICAgICAgID0gJzEwNC44NC4xMTUnCjE5ICAgICAgID0gOTQuYTAoZTk9M2UpCmRkICAgICAgICAgICA9IGEwKDNlLCAyZi4xYikKYzcgICAgICAgICAgPSAyMS42NygxMDYuZTguZTYoJ2EzOi8vZWMvYzEvJyArIDNlICwgJ2M3LjEwOCcpKQo5OCAgICAgICAgICAgID0gMjEuNjcoMTA2LmU4LmU2KCdhMzovL2VjL2MxLycgKyAzZSwgJzk4LmUwJykpCmFhICAgICAgICAgPSAnZjQ6Ly85MS43Yi4xMzgvYmIvNzAuYjknCjc0ICAgICAgICA9IDE5LjJjKCdjZicpCjM4ICAgICAgID0gMTkuMmMoJ2MwJykKNjMgICAgICAgPSBkZC5mZC4xNDYoJzYzJywgJycpCmFiICAgICAgICAgPSAxOS4yYygnYzUnKQpiYyA9JzcyOi8vOTEuODEuNGUvMTMvMTNhLzEwNT8xNTk9JwpiYSA9JyZkMD0xNTMmZjE9YWUmMTU1PTEyMSYxMGY9NDEmNjA9ODQmN2Y9NTAnCmYwID0gJzcyOi8vOTEuODEuNGUvMTMvMTNhL2IyP2YxPWFlJmNhPScKZGUgPSAnJjdmPTUwJjEwZj00MCcKCjNmIDcwKCk6CgkxNGE9NTIoYWEpCQoJMTc9M2EuMjUoJ2YzPSIoLis/KSIuKz80OD0iKC4rPykiLis/MTAxPSIoLis/KSInLDNhLjVhKS4yNCgxNGEpCgk0NCBmMyw0OCw2MyAyMyAxNzoKCQkxNiBjMiAnYmUnIDIzIGYzOgoJCQkyMChmMyw0OCwxLDYzLGM3KQoJCTE2ICdiZScgMjMgZjM6CgkJCTE2IDc0ID09ICc5ZSc6CgkJCQkxNiAzOCA9PSAnJzoKCQkJCSAgICA3OCA9IDE0LmJmKCkKCQkJCSAgICBiNCA9IDc4LmQ4KCdkNyBhNScsICcxNDggMTM5IDEyMiAxMTEgMTJmIGNmIDY0JywnJywnYjggMTE4IGEgYzAgMTExIGZmIGRhIDExMicsJ2I1JywnMTI5IDE0YycpCgkJCQkgICAgMTYgYjQgPT0gMToKCQkJCQk1NiA9IDIxLjlmKCcnLCAnMTEzIDk5JykKCQkJCQk1Ni5hZCgpCgkJCQkJMTYgKDU2LjdhKCkpOgoJCQkJCSAgICA4YSA9IDU2LmE3KCkKCQkJCQkgICAgMTkuZDkoJ2MwJyw4YSkgICAgICAKCQkJCQkyMChmMyw0OCwxLDYzLGM3KQoJCQkxNiA3NCA9PSAnOWUnOgoJCQkJMTYgMzggPD4gJyc6CgkJCQkJMjAoZjMsNDgsMSw2MyxjNykKCTNjKCcxNTIgMTM3IGY5IDEzNicsJzQ4JywyLCdmNDovLzkxLjdiLjEzOC9iYi8xMDIvZmUuMTA4JyxjNykKCTIxLmYoJzE1NC4yYSgxNDEpJykKICAgICAgCjNmIDc3KDQ4KToKCTE2ICc3MCcgMjMgNDg6CgkJOWMoNDgpCgkxNiAnYmUnIDIzIDQ4OgoJCTE2IDM4IDw+ICcnOgoJCQk3OCA9IDE0LmJmKCkKCQkJYjQgPSA3OC5kOCgnZDcgYTUnLCAnYjggMTFmIDEwYSBjMCAxNGIgMTE4JywnMTExIGYyJywnJywnYjUnLCcxMmMgMTRmIDEwYSAxMjMnKQoJCQkxNiBiNCA9PSAxOgoJCQkgICA1ODogICAgIAoJCQkgICAgICA1NiA9IDIxLjlmKCcnLCAnMTEzIDk5JykKCQkJICAgICAgNTYuYWQoKQoJCQkgICAgICAxNiAoNTYuN2EoKSk6CgkJCQkgICAgOGEgPSA1Ni5hNygpCgkJCSAgICAgIDE2IDhhID09IDM4OgoJCQkJMjYgPSA2Mig0OCkKCQkJCTQ0IDY4IDIzIDI2OgoJCQkJICAgICAgIDNjKDY4WyJmMyJdLDY4WyI0OCJdLDMsNjMsYzcpCgkJCSAgIDFlOjQ1CgkxNiAnYjYnIDIzIDQ4OgoJCTI2ID0gNjIoNDgpCgkJMTBlID0gNjUoMjYpCgkJNDQgNjggMjMgMjY6CgkJCTdjKDY4WyJmMyJdLDY4WyI0OCJdLDMsNjMsMTBlLDE4PTZmKQoJCWE5KCdiNicsICcxMjcnKQoJCTE2ICc3MCcgMjMgNDg6CgkJCTIxLmYoJzE1NC4yYSg1MCknKQoJNTcgJ2JlJyBjMiAyMyA0ODoKCQkxMjggPSA0OAoJCTI2ID0gNjIoNDgpCgkJNDQgNjggMjMgMjY6CgkJCTE2ICcxMy40ZS83ZD8zMz0nIDIzIDY4WyI0OCJdOgoJCQkJMjAoNjhbImYzIl0sNjhbIjQ4Il0sMyw2MyxjNykKCQkJNTcgJzEzLjRlLzU0PzVmPScgMjMgNjhbIjQ4Il06CgkJCQkyMCg2OFsiZjMiXSw2OFsiNDgiXSwzLDYzLGM3KQoJCQk1NToKCQkJCTE2ICdiOScgMjMgNjhbIjQ4Il06CgkJCQkJMjAoNjhbImYzIl0sNjhbIjQ4Il0sMyw2MyxjNykKCQkJCTU1OgoJCQkJCTNjKDY4WyJmMyJdLDY4WyI0OCJdLDMsNjMsYzcpCgkJMjEuZignMTU0LjJhKDUwKScpCgkKM2YgOWMoNDgpOgoJMTRhPTUyKDQ4KQkKCTE3PTNhLjI1KCdmMz0iKC4rPykiLis/NDg9IiguKz8pIi4rPzEwMT0iKC4rPykiJywzYS41YSkuMjQoMTRhKQoJNDQgZjMsNDgsNjMgMjMgMTc6CgkJMTYgJzEzLjRlLzU0PzVmPScgMjMgNDg6CgkJCTIwKGYzLDQ4LDMsNjMsYzcpCgkJNTcgJzEzLjRlLzdkPzMzPScgMjMgNDg6CgkJCTIwKGYzLDQ4LDMsNjMsYzcpCgkJNTU6CgkJCTIwKGYzLDQ4LDEsNjMsYzcpCgkyMS5mKCcxNTQuMmEoNTApJykKCjNmIDYyKDQ4KToKCTE0YT01Mig0OCkJCgk2MT0zYS4yNSgnXiMuKz86LT9bMC05XSooLio/KSwoLio/KVxmYyguKj8pJCcsM2EuMTU4KzNhLjE0ZCszYS5mYiszYS4xNTEpLjI0KDE0YSkKCTEwYiA9IFtdCgk0NCAxNWEsIGYzLCA0OCAyMyA2MToKCQkzNiA9IHsiMTVhIjogMTVhLCAiZjMiOiBmMywgIjQ4IjogNDh9CgkJMTBiLjhmKDM2KQoJNWYgPSBbXQoJNDQgNjggMjMgMTBiOgoJCTM2ID0geyJmMyI6IDY4WyJmMyJdLCAiNDgiOiA2OFsiNDgiXX0KCQk2MT0zYS4yNSgnICguKz8pPSIoLis/KSInLDNhLjE1OCszYS4xNGQrM2EuZmIrM2EuMTUxKS4yNCg2OFsiMTVhIl0pCgkJNDQgZDEsIGQ2IDIzIDYxOgoJCQkzNltkMS5jYygpLjExZSgpLjQoJy0nLCAnMTVjJyldID0gZDYuY2MoKQoJCTVmLjhmKDM2KQoJMWYgNWYKCSAgICAgCjNmIDk3KDQ4LGYzKToKCSAgICAyOSA0OAoJICAgIDE2ICdiOScgMjMgNDg6CgkJICAgIDI5ICcxMjQgYjknCgkJICAgIDc3KDQ4KQoJICAgIDU1OgoJCSAgICAxNiAnMTMuNGUvN2Q/MzM9JyAyMyA0ODoKCQkJMjkgJ2FjIDEwNycKCQkJM2QgPSA0OC44MCgnMzM9JylbMV0KCQkJODIgPSBiYyArIDNkICsgYmEKCQkJMzcgPSAxMS40YSg4MikKCQkJMzcuMmUoJzg5LTZjJywgJzRjLzUuMCAoMTU3OyBmYjsgMTU3IGNlIDUuMTsgZGMtY2I7IGQ1OjEuOS4wLjMpIDZkLzJkIDRiLzMuMC4zJykKCQkJNyA9IDExLjQ5KDM3KQoJCQkxNGE9Ny44NSgpCgkJCTcuNmIoKQoJCQkxNGEgPSAxNGEuNCgnXDE0NycsJycpLjQoJ1xmYycsJycpLjQoJyAgJywnJykKCQkJMTc9M2EuMjUoJyJhMiI6ICIoLis/KSIuKz8iODciOiAiKC4rPykiJywzYS41YSkuMjQoMTRhKQoJCQkyOSAxNwoJCQk0NCA5ZCxmMyAyMyAxNzoKCQkJCTQ4ID0gJzcyOi8vOTEuMTMuNGUvZGI/MTRlPScrOWQKCQkJCTNjKGYzLDQ4LDMsNjMsYzcpCgkJICAgIDU3ICcxMy40ZS81ND81Zj0nIDIzIDQ4OgoJCQkyOSAnYWMgZjYnCgkJCTNkID0gNDguODAoJzU0PzVmPScpWzFdCgkJCTgyID0gZjAgKyAzZCArIGRlCgkJCTM3ID0gMTEuNGEoODIpCgkJCTM3LjJlKCc4OS02YycsICc0Yy81LjAgKDE1NzsgZmI7IDE1NyBjZSA1LjE7IGRjLWNiOyBkNToxLjkuMC4zKSA2ZC8yZCA0Yi8zLjAuMycpCgkJCTcgPSAxMS40OSgzNykKCQkJMTRhPTcuODUoKQoJCQk3LjZiKCkKCQkJMTRhID0gMTRhLjQoJ1wxNDcnLCcnKS40KCdcZmMnLCcnKS40KCcgICcsJycpCgkJCTE3PTNhLjI1KCciODciOiAiKC4rPykiLis/ImEyIjogIiguKz8pIicsM2EuNWEpLjI0KDE0YSkKCQkJNDQgZjMsOWQgMjMgMTc6CgkJCQk0OCA9ICc3MjovLzkxLjEzLjRlL2RiPzE0ZT0nKzlkCgkJCQkzYyhmMyw0OCwzLDYzLGM3KQoJCSAgICA1NyAnYzYnIDIzIDQ4OgoJCQkgICAgMjkgJ2M4JwoJCQkgICAgNDggPSA0OC40KCc4NCcsJzExYy84NCcpCgkJCSAgICAzNyA9IDExLjRhKDQ4KQoJCQkgICAgMzcuMmUoJzg5LTZjJywgJzRjLzUuMCAoMTU3OyBmYjsgMTU3IGNlIDUuMTsgZGMtY2I7IGQ1OjEuOS4wLjMpIDZkLzJkIDRiLzMuMC4zJykKCQkJICAgIDcgPSAxMS40OSgzNykKCQkJICAgIDE0YT03Ljg1KCkKCQkJICAgIDcuNmIoKQoJCQkgICAgMTc9M2EuMjUoJzE0OSIsIjQ4Ilw6IiguKz8pIicpLjI0KDE0YSlbMF0KCQkJICAgIDFhPTE3LjQoJ1wvJywnLycpCgkJCSAgICA0Mz01MwoJCQkgICAgMTNiPTE0LjMxKGYzLCAyYj02MyxlPTYzKTsgMTNiLjNiKCA2MD0iNWQiLCAyMj17ICI3MSI6IGYzIH0gKQoJCQkgICAgNDM9Yy4xM2UoNDc9NjYoMmYuMWJbMV0pLDQ4PTFhLDM0PTEzYikKCQkJICAgIDU4OgoJCQkJIDIxLmI3ICgpLmY1KDFhLCAxM2IsIDZmKQoJCQkJIDFmIDQzCgkJCSAgICAxZToKCQkJCSA0NQoJCSAgICA1NToKCQkJMjkgJzExNiAxMzInCgkJCTE2IDRmLjViKDQ4KS5lMSgpOgoJCQkJMWEgPSA0Zi41Yig0OCkuMTQ0KCkKCQkJNTU6IDFhPTQ4IAoJCQk0Mz01MwoJCQkxM2I9MTQuMzEoZjMsIDJiPTYzLGU9NjMpOyAxM2IuM2IoIDYwPSI1ZCIsIDIyPXsgIjcxIjogZjMgfSApCgkJCTQzPWMuMTNlKDQ3PTY2KDJmLjFiWzFdKSw0OD0xYSwzND0xM2IpCgkJCTU4OgoJCQkgICAgIDIxLmI3ICgpLmY1KDFhLCAxM2IsIDZmKQoJCQkgICAgIDFmIDQzCgkJCTFlOgoJCQkgICAgIDQ1CgkgICAgCjNmIGE4KCk6Cgk3NiA9ICcnCgllNSA9ICc3MjovLzEwYy4xMTQuNGUvMTBkLzE1MC80ZC04Yi8xMzA/OTYnCgkzNyA9IDExLjRhKGU1KQoJMzcuMmUoJzg5LTZjJywgJzRjLzUuMCAoMTU3OyBmYjsgMTU3IGNlIDUuMTsgZGMtY2I7IGQ1OjEuOS4wLjMpIDZkLzJkIDRiLzMuMC4zJykKCTcgPSAxMS40OSgzNykKCTE0YT03Ljg1KCkKCTcuNmIoKQoJMTRhID0gMTRhLjQoJy9mYycsJycpCgkxNGEgPSAxNGEuOTAoJ2RmLTgnKS4xMDMoJ2RmLTgnKS40KCcmIzM5OycsJ1wnJykuNCgnJiMxMDsnLCcgLSAnKS40KCcmIzExOTsnLCcnKQoJMTc9M2EuMjUoIjw4Nz4oLis/KTwvODc+Lis/PGE0PiguKz8pPC9hND4iLDNhLjVhKS4yNCgxNGEpWzE6XQoJNDQgMzAsIDk1IDIzIDE3OgoJICAgIDU4OgoJCQkgICAgMzAgPSAzMC45MCgnMTFiJywgJ2IzJykKCSAgICAxZToKCQkJICAgIDMwID0gMzAuOTAoJ2RmLTgnLCdiMycpCgkgICAgOTUgPSA5NVs6LTE1XQoJICAgIDMwID0gMzAuNCgnJjE0MzsnLCcnKQoJICAgIDk1ID0gJ1s2ZSBmN11bYl0nKzk1KydbL2JdWy82ZV0nCgkgICAgNzYgPSA3Nis5NSsnXGZjJyszMCsnXGZjJysnXGZjJwoJOWIoJ1s2ZSBmN11bYl1AZmFbL2JdWy82ZV0nLCA3NikKCjNmIDliKGE2LCA3Nik6CiAgICBlOSA9IDEyNQogICAgMjEuZignYWYoJWQpJyAlIGU5KQogICAgMjEuZDIoMTAwKQogICAgZTMgPSAxNC4xMDkoZTkpCiAgICBhMSA9IDUwCiAgICAxMWQgKGExID4gMCk6Cgk1ODoKCSAgICAyMS5kMigxMCkKCSAgICBhMSAtPSAxCgkgICAgZTMuN2UoMSkuZWQoYTYpCgkgICAgZTMuN2UoNSkuZjgoNzYpCgkgICAgMWYKCTFlOgoJICAgIDQ1CgkJCQkgICAgIAozZiA1Mig0OCk6Cgk0OCArPSAnPyVkPSVkJyAlICg4ZS5iMSgxLCBkNCksIDhlLmIxKDEsIGQ0KSkKCTM3ID0gMTEuNGEoNDgpCgkzNy4yZSgnODktNmMnLCAnNGMvNS4wICgxNTc7IGZiOyAxNTcgY2UgNS4xOyBkYy1jYjsgZDU6MS45LjAuMykgNmQvMmQgNGIvMy4wLjMnKQoJNyA9IDExLjQ5KDM3KQoJMTRhPTcuODUoKQoJMTRhID0gMTRhLjQoJ1wxNDcnLCcnKS40KCdcMTViJywnJykuNCgnJjEzYzsnLCcnKS40KCdcJycsJycpCgk3LjZiKCkKCTFmIDE0YQoKM2YgODgoKToKCTg2PVtdCgk3OT0yZi4xYlsyXQoJMTYgNjUoNzkpPj0yOgoJCTE1YT0yZi4xYlsyXQoJCTZhPTE1YS40KCc/JywnJykKCQkxNiAoMTVhWzY1KDE1YSktMV09PScvJyk6CgkJCTE1YT0xNWFbMDo2NSgxNWEpLTJdCgkJNDI9NmEuODAoJyYnKQoJCTg2PXt9CgkJNDQgMTU2IDIzIDExYSg2NSg0MikpOgoJCQkyOD17fQoJCQkyOD00MlsxNTZdLjgwKCc9JykKCQkJMTYgKDY1KDI4KSk9PTI6CgkJCQk4NlsyOFswXV09MjhbMV0KCQkJICAgICAgIAoJMWYgODYKCSAgICAgICAKM2YgMjAoZjMsNDgsMTIsNjMsYzcsMTQ1PScnKToKCWVlPTJmLjFiWzBdKyI/NDg9IisxMTcuNig0OCkrIiYxMj0iKzU5KDEyKSsiJmYzPSIrMTE3LjYoZjMpKyImNjM9IisxMTcuNig2MykrIiYxNDU9IisxMTcuNigxNDUpCgk0Mz01MwoJMTNiPTE0LjMxKGYzLCAyYj0iNjkuZTAiLCBlPTYzKQoJMTNiLjNiKCA2MD0iNWQiLCAyMj17ICI3MSI6IGYzLCAnZWInOiAxNDUgfSApCgkxM2IuMjcoJzFjJywgYzcpCgk0Mz1jLjEzZSg0Nz02NigyZi4xYlsxXSksNDg9ZWUsMzQ9MTNiLDE4PTUzKQoJMWYgNDMKCjNmIDNjKGYzLDQ4LDEyLDYzLGM3LDE0NT0nJyk6CgllZT0yZi4xYlswXSsiPzQ4PSIrMTE3LjYoNDgpKyImMTI9Iis1OSgxMikrIiZmMz0iKzExNy42KGYzKSsiJjYzPSIrMTE3LjYoNjMpKyImMTQ1PSIrMTE3LjYoMTQ1KQoJNDM9NTMKCTEzYj0xNC4zMShmMywgMmI9IjY5LmUwIiwgZT02MykKCTEzYi4zYiggNjA9IjVkIiwgMjI9eyAiNzEiOiBmMywgJ2ViJzogMTQ1IH0gKQoJMTNiLjI3KCcxYycsIGM3KQoJNDM9Yy4xM2UoNDc9NjYoMmYuMWJbMV0pLDQ4PWVlLDM0PTEzYiwxOD02ZikKCTFmIDQzCgozZiA3YyhmMyw0OCwxMiw2Myw5MywxOD02Zik6CgkxNiBhYj09JzllJzoKCSAgMTYgYzIgJzZlJyAyMyBmMzoKCSAgICA0Nj1mMy44ZCgnKCcpCgkgICAgNWM9IiIKCSAgICAxZD0iIgoJICAgIDE2IDY1KDQ2KT4wOgoJCTVjPTQ2WzBdCgkJMWQ9NDZbMl0uOGQoJyknKQoJICAgIDE2IDY1KDFkKT4wOgoJCTFkPTFkWzBdCgkgICAgMTMzID0gNzMuZTcoKQoJICAgIDgzID0gMTMzLmVhKCcxMjYnLCBmMz01YyAsMTNmPTFkKQoJICAgIGVlPTJmLjFiWzBdKyI/NDg9IisxMTcuNig0OCkrIiY1MT0iKzU5KDUxKSsiJjEyPSIrNTkoMTIpKyImZjM9IisxMTcuNihmMykKCSAgICA0Mz01MwoJICAgIDEzYj0xNC4zMShmMywgMmI9ODNbJ2U0J10sIGU9NjMpCgkgICAgMTNiLjNiKCA2MD0iNWQiLCAyMj0gODMgKQoJICAgIDMyID0gW10KCSAgICAzMi44ZigoJzEyMCBjNCcsICcxNDAuMTEwKDEzNCknKSkKCSAgICAxM2IuOGMoMzIsIGMzPTUzKQoJICAgIDE2IGMyIDgzWyc3NSddID09ICcnOiAxM2IuMjcoJzFjJywgODNbJzc1J10pCgkgICAgNTU6IDEzYi4yNygnMWMnLCBjNykKCSAgICA0Mz1jLjEzZSg0Nz02NigyZi4xYlsxXSksNDg9ZWUsMzQ9MTNiLDE4PTE4LGQzPTkzKQoJICAgIDFmIDQzCgk1NToKCSAgICBlZT0yZi4xYlswXSsiPzQ4PSIrMTE3LjYoNDgpKyImNTE9Iis1OSg1MSkrIiYxMj0iKzU5KDEyKSsiJmYzPSIrMTE3LjYoZjMpCgkgICAgNDM9NTMKCSAgICAxM2I9MTQuMzEoZjMsIDJiPTk4LCBlPTk4KQoJICAgIDEzYi4zYiggNjA9IjVkIiwgMjI9eyAiNzEiOiBmMyB9ICkKCSAgICAxM2IuMjcoJzFjJywgYzcpCgkgICAgNDM9Yy4xM2UoNDc9NjYoMmYuMWJbMV0pLDQ4PWVlLDM0PTEzYiwxOD0xOCkKCSAgICAxZiA0MwoJCjNmIGE5KDY0LCA5YSk6CiAgICAxNiA2NDoKCWMuY2QoNjYoMmYuMWJbMV0pLCA2NCkKICAgIDE2IDE5LjJjKCcxMzUtMTJhJyk9PSc5ZSc6CgkyMS5mKCIxNTQuMmEoJTE1MCkiICUgMTkuMmMoOWEpICkKCjE1YT04OCgpOyA0OD01ZTsgZjM9NWU7IDEyPTVlOyA1MT01ZTsgNjM9NWUKNTg6IDUxPTExNy4zNSgxNWFbIjUxIl0pCjFlOiA0NQo1ODogNDg9MTE3LjM1KDE1YVsiNDgiXSkKMWU6IDQ1CjU4OiBmMz0xMTcuMzUoMTVhWyJmMyJdKQoxZTogNDUKNTg6IDEyPTY2KDE1YVsiMTIiXSkKMWU6IDQ1CjU4OiA2Mz0xMTcuMzUoMTVhWyI2MyJdKQoxZTogNDUKIAojMjkgIjEzMTogIis1OSg1MSk7IDI5ICIxMmU6ICIrNTkoMTIpOyAyOSAiMTQyOiAiKzU5KDQ4KTsgMjkgIjEyZDogIis1OShmMykKIAoxNiAxMj09NWUgMTJiIDQ4PT01ZSAxMmIgNjUoNDgpPDE6IDcwKCkKNTcgMTI9PTE6NzcoNDgpCjU3IDEyPT0yOmE4KCkKNTcgMTI9PTM6OTcoNDgsZjMpCgpjLmIwKDY2KDJmLjFiWzFdKSk=")))(lambda a,b:b[int("0x"+a.group(1),16)],"0|1|2|3|replace|5|quote_plus|response|8|9|a|B|xbmcplugin|d|thumbnailImage|executebuiltin|10|urllib2|mode|youtube|xbmcgui|15|if|match|isFolder|selfAddon|streamurl|argv|fanart_image|simpleyear|except|return|addDir|xbmc|infoLabels|in|findall|compile|channels|setProperty|splitparams|print|SetViewMode|iconImage|getSetting|2008092417|add_header|sys|status|ListItem|contextMenuItems|search_query|listitem|unquote_plus|item_data|req|adultpass|39|re|setInfo|addLink|searchterm|addon_id|def|AIzaSyBAdxZCHbeJwnQ7dDZQJNfcaF46MdqJ24E|AIzaSyA7v1QOHz8Q4my5J8uGSpr0zRrntRjnMmk|pairsofparams|ok|for|pass|splitName|handle|url|urlopen|Request|Firefox|Mozilla|AKfycbyBcUa5TlEQudk6Y_0o0ZubnmhGL_|com|urlresolver|50|site|open_url|True|playlist|else|keyb|elif|try|str|DOTALL|HostedMediaFile|simplename|Video|None|list|type|matches|GetList|iconimage|content|len|int|translatePath|channel|DefaultFolder|cleanedparams|close|Agent|Gecko|COLOR|False|Index|Title|https|metahandlers|adultopt|backdrop_url|text|GetChans|dialog|paramstring|isConfirmed|metalkettle|addLinkMeta|results|getControl|maxResults|split|googleapis|ytapi|meta|video|read|param|title|get_params|User|passw|b7Up8kQt11xgVwz3ErTo|addContextMenuItems|partition|random|append|decode|www|import|itemcount|xbmcaddon|dte|588677963413065728|PLAYLINK|icon|Password|viewType|showText|CatIndex|ytid|true|Keyboard|Addon|retry|videoId|special|pubDate|Content|heading|getText|TWITTER|setView|baseurl|metaset|Youtube|doModal|snippet|ActivateWindow|endOfDirectory|randint|playlistItems|ignore|ret|Cancel|movies|Player|Please|txt|ytapi2|UKTurk|ytapi1|common_addon|XXX|Dialog|password|addons|not|replaceItems|Information|enable_meta|dailymotion|fanart|DailyMotion|metahandler|playlistId|GB|strip|setContent|NT|adult|regionCode|field|sleep|totalItems|10000|rv|value|Adult|yesno|setSetting|accidental|watch|en|addon|ytpl2|utf|png|valid_url|resources|win|cover_url|twit|join|MetaData|path|id|get_meta|plot|home|setLabel|u|from|ytpl|part|continue|name|http|play|Playlist|blue|setText|Twitter|uk_turk|U|n|queries|twitter|prevent|100|img|thumbs|encode|plugin|search|os|Search|jpg|Window|the|li|script|macros|cnt|key|Action|to|access|Set|google|ukturk|Direct|urllib|set|x2026|range|ascii|embed|while|lower|enter|Movie|en_US|opted|money|Found|10147|movie|MAIN|burl|Lets|view|or|Show|Name|Mode|show|exec|Site|Link|mg|Info|auto|Feed|Turk|co|have|v3|liz|nbsp|libs|addDirectoryItem|year|XBMC|500|URL|amp|resolve|description|get|r|You|mp4|link|you|Go|M|v|me|s|S|UK|US|Container|hl|i|Windows|I|q|params|t|_".split("|")))
需要注意的是,如指出的评论,如果你只是想看到生成的脚本可以更换第二exec用print,例如从那么回事:
exec
print
exec("import re;import base64");exec((lambda p,y: ...
至:
exec("import re;import base64");print((lambda p,y: ... # ^^^^^
并运行结果。如果你想了解多一点关于 如何 它的工作原理,见下图。
您有两个输入,一个输入只是用管道分隔的数据(pipestr),另一个是基于该数据的以base 64(b64str)编码的程序的结构。除去这两个字符串文字(加上不必要的'0x'),剩下的就是:
pipestr
b64str
'0x'
data = pipestr.split("|") code = re.sub( r"([0-9a-f]+)", # find all hexadecimals lambda match: data[int(match.group(1), 16)], # replace them by indexing the data base64.b64decode(b64str) # insert into the structure )
这是解码后的结构:
92 21,94,14,c,117,11,106,3a,2f,4f,8e ef e2.13d.bd 92 a0 ef c9 92 73 3e = '104.84.115' 19 = 94.a0(e9=3e) dd = a0(3e, 2f.1b) c7 = 21.67(106.e8.e6('a3://ec/c1/' + 3e , 'c7.108')) 98 = 21.67(106.e8.e6('a3://ec/c1/' + 3e, '98.e0')) aa = 'f4://91.7b.138/bb/70.b9' 74 = 19.2c('cf') 38 = 19.2c('c0') 63 = dd.fd.146('63', '') ab = 19.2c('c5') bc ='72://91.81.4e/13/13a/105?159=' ba ='&d0=153&f1=ae&155=121&10f=41&60=84&7f=50' f0 = '72://91.81.4e/13/13a/b2?f1=ae&ca=' de = '&7f=50&10f=40' 3f 70(): 14a=52(aa) 17=3a.25('f3="(.+?)".+?48="(.+?)".+?101="(.+?)"',3a.5a).24(14a) 44 f3,48,63 23 17: 16 c2 'be' 23 f3: 20(f3,48,1,63,c7) 16 'be' 23 f3: 16 74 == '9e': 16 38 == '': 78 = 14.bf() b4 = 78.d8('d7 a5', '148 139 122 111 12f cf 64','','b8 118 a c0 111 ff da 112','b5','129 14c') 16 b4 == 1: 56 = 21.9f('', '113 99') 56.ad() 16 (56.7a()): 8a = 56.a7() 19.d9('c0',8a) 20(f3,48,1,63,c7) 16 74 == '9e': 16 38 <> '': 20(f3,48,1,63,c7) 3c('152 137 f9 136','48',2,'f4://91.7b.138/bb/102/fe.108',c7) 21.f('154.2a(141)') 3f 77(48): 16 '70' 23 48: 9c(48) 16 'be' 23 48: 16 38 <> '': 78 = 14.bf() b4 = 78.d8('d7 a5', 'b8 11f 10a c0 14b 118','111 f2','','b5','12c 14f 10a 123') 16 b4 == 1: 58: 56 = 21.9f('', '113 99') 56.ad() 16 (56.7a()): 8a = 56.a7() 16 8a == 38: 26 = 62(48) 44 68 23 26: 3c(68["f3"],68["48"],3,63,c7) 1e:45 16 'b6' 23 48: 26 = 62(48) 10e = 65(26) 44 68 23 26: 7c(68["f3"],68["48"],3,63,10e,18=6f) a9('b6', '127') 16 '70' 23 48: 21.f('154.2a(50)') 57 'be' c2 23 48: 128 = 48 26 = 62(48) 44 68 23 26: 16 '13.4e/7d?33=' 23 68["48"]: 20(68["f3"],68["48"],3,63,c7) 57 '13.4e/54?5f=' 23 68["48"]: 20(68["f3"],68["48"],3,63,c7) 55: 16 'b9' 23 68["48"]: 20(68["f3"],68["48"],3,63,c7) 55: 3c(68["f3"],68["48"],3,63,c7) 21.f('154.2a(50)') 3f 9c(48): 14a=52(48) 17=3a.25('f3="(.+?)".+?48="(.+?)".+?101="(.+?)"',3a.5a).24(14a) 44 f3,48,63 23 17: 16 '13.4e/54?5f=' 23 48: 20(f3,48,3,63,c7) 57 '13.4e/7d?33=' 23 48: 20(f3,48,3,63,c7) 55: 20(f3,48,1,63,c7) 21.f('154.2a(50)') 3f 62(48): 14a=52(48) 61=3a.25('^#.+?:-?[0-9]*(.*?),(.*?)\fc(.*?)$',3a.158+3a.14d+3a.fb+3a.151).24(14a) 10b = [] 44 15a, f3, 48 23 61: 36 = {"15a": 15a, "f3": f3, "48": 48} 10b.8f(36) 5f = [] 44 68 23 10b: 36 = {"f3": 68["f3"], "48": 68["48"]} 61=3a.25(' (.+?)="(.+?)"',3a.158+3a.14d+3a.fb+3a.151).24(68["15a"]) 44 d1, d6 23 61: 36[d1.cc().11e().4('-', '15c')] = d6.cc() 5f.8f(36) 1f 5f 3f 97(48,f3): 29 48 16 'b9' 23 48: 29 '124 b9' 77(48) 55: 16 '13.4e/7d?33=' 23 48: 29 'ac 107' 3d = 48.80('33=')[1] 82 = bc + 3d + ba 37 = 11.4a(82) 37.2e('89-6c', '4c/5.0 (157; fb; 157 ce 5.1; dc-cb; d5:1.9.0.3) 6d/2d 4b/3.0.3') 7 = 11.49(37) 14a=7.85() 7.6b() 14a = 14a.4('\147','').4('\fc','').4(' ','') 17=3a.25('"a2": "(.+?)".+?"87": "(.+?)"',3a.5a).24(14a) 29 17 44 9d,f3 23 17: 48 = '72://91.13.4e/db?14e='+9d 3c(f3,48,3,63,c7) 57 '13.4e/54?5f=' 23 48: 29 'ac f6' 3d = 48.80('54?5f=')[1] 82 = f0 + 3d + de 37 = 11.4a(82) 37.2e('89-6c', '4c/5.0 (157; fb; 157 ce 5.1; dc-cb; d5:1.9.0.3) 6d/2d 4b/3.0.3') 7 = 11.49(37) 14a=7.85() 7.6b() 14a = 14a.4('\147','').4('\fc','').4(' ','') 17=3a.25('"87": "(.+?)".+?"a2": "(.+?)"',3a.5a).24(14a) 44 f3,9d 23 17: 48 = '72://91.13.4e/db?14e='+9d 3c(f3,48,3,63,c7) 57 'c6' 23 48: 29 'c8' 48 = 48.4('84','11c/84') 37 = 11.4a(48) 37.2e('89-6c', '4c/5.0 (157; fb; 157 ce 5.1; dc-cb; d5:1.9.0.3) 6d/2d 4b/3.0.3') 7 = 11.49(37) 14a=7.85() 7.6b() 17=3a.25('149","48"\:"(.+?)"').24(14a)[0] 1a=17.4('\/','/') 43=53 13b=14.31(f3, 2b=63,e=63); 13b.3b( 60="5d", 22={ "71": f3 } ) 43=c.13e(47=66(2f.1b[1]),48=1a,34=13b) 58: 21.b7 ().f5(1a, 13b, 6f) 1f 43 1e: 45 55: 29 '116 132' 16 4f.5b(48).e1(): 1a = 4f.5b(48).144() 55: 1a=48 43=53 13b=14.31(f3, 2b=63,e=63); 13b.3b( 60="5d", 22={ "71": f3 } ) 43=c.13e(47=66(2f.1b[1]),48=1a,34=13b) 58: 21.b7 ().f5(1a, 13b, 6f) 1f 43 1e: 45 3f a8(): 76 = '' e5 = '72://10c.114.4e/10d/150/4d-8b/130?96' 37 = 11.4a(e5) 37.2e('89-6c', '4c/5.0 (157; fb; 157 ce 5.1; dc-cb; d5:1.9.0.3) 6d/2d 4b/3.0.3') 7 = 11.49(37) 14a=7.85() 7.6b() 14a = 14a.4('/fc','') 14a = 14a.90('df-8').103('df-8').4(''','\'').4(' ',' - ').4('w','') 17=3a.25("<87>(.+?)</87>.+?<a4>(.+?)</a4>",3a.5a).24(14a)[1:] 44 30, 95 23 17: 58: 30 = 30.90('11b', 'b3') 1e: 30 = 30.90('df-8','b3') 95 = 95[:-15] 30 = 30.4('&143;','') 95 = '[6e f7][b]'+95+'[/b][/6e]' 76 = 76+95+'\fc'+30+'\fc'+'\fc' 9b('[6e f7][b]@fa[/b][/6e]', 76) 3f 9b(a6, 76): e9 = 125 21.f('af(%d)' % e9) 21.d2(100) e3 = 14.109(e9) a1 = 50 11d (a1 > 0): 58: 21.d2(10) a1 -= 1 e3.7e(1).ed(a6) e3.7e(5).f8(76) 1f 1e: 45 3f 52(48): 48 += '?%d=%d' % (8e.b1(1, d4), 8e.b1(1, d4)) 37 = 11.4a(48) 37.2e('89-6c', '4c/5.0 (157; fb; 157 ce 5.1; dc-cb; d5:1.9.0.3) 6d/2d 4b/3.0.3') 7 = 11.49(37) 14a=7.85() 14a = 14a.4('\147','').4('\15b','').4('&13c;','').4('\'','') 7.6b() 1f 14a 3f 88(): 86=[] 79=2f.1b[2] 16 65(79)>=2: 15a=2f.1b[2] 6a=15a.4('?','') 16 (15a[65(15a)-1]=='/'): 15a=15a[0:65(15a)-2] 42=6a.80('&') 86={} 44 156 23 11a(65(42)): 28={} 28=42[156].80('=') 16 (65(28))==2: 86[28[0]]=28[1] 1f 86 3f 20(f3,48,12,63,c7,145=''): ee=2f.1b[0]+"?48="+117.6(48)+"&12="+59(12)+"&f3="+117.6(f3)+"&63="+117.6(63)+"&145="+117.6(145) 43=53 13b=14.31(f3, 2b="69.e0", e=63) 13b.3b( 60="5d", 22={ "71": f3, 'eb': 145 } ) 13b.27('1c', c7) 43=c.13e(47=66(2f.1b[1]),48=ee,34=13b,18=53) 1f 43 3f 3c(f3,48,12,63,c7,145=''): ee=2f.1b[0]+"?48="+117.6(48)+"&12="+59(12)+"&f3="+117.6(f3)+"&63="+117.6(63)+"&145="+117.6(145) 43=53 13b=14.31(f3, 2b="69.e0", e=63) 13b.3b( 60="5d", 22={ "71": f3, 'eb': 145 } ) 13b.27('1c', c7) 43=c.13e(47=66(2f.1b[1]),48=ee,34=13b,18=6f) 1f 43 3f 7c(f3,48,12,63,93,18=6f): 16 ab=='9e': 16 c2 '6e' 23 f3: 46=f3.8d('(') 5c="" 1d="" 16 65(46)>0: 5c=46[0] 1d=46[2].8d(')') 16 65(1d)>0: 1d=1d[0] 133 = 73.e7() 83 = 133.ea('126', f3=5c ,13f=1d) ee=2f.1b[0]+"?48="+117.6(48)+"&51="+59(51)+"&12="+59(12)+"&f3="+117.6(f3) 43=53 13b=14.31(f3, 2b=83['e4'], e=63) 13b.3b( 60="5d", 22= 83 ) 32 = [] 32.8f(('120 c4', '140.110(134)')) 13b.8c(32, c3=53) 16 c2 83['75'] == '': 13b.27('1c', 83['75']) 55: 13b.27('1c', c7) 43=c.13e(47=66(2f.1b[1]),48=ee,34=13b,18=18,d3=93) 1f 43 55: ee=2f.1b[0]+"?48="+117.6(48)+"&51="+59(51)+"&12="+59(12)+"&f3="+117.6(f3) 43=53 13b=14.31(f3, 2b=98, e=98) 13b.3b( 60="5d", 22={ "71": f3 } ) 13b.27('1c', c7) 43=c.13e(47=66(2f.1b[1]),48=ee,34=13b,18=18) 1f 43 3f a9(64, 9a): 16 64: c.cd(66(2f.1b[1]), 64) 16 19.2c('135-12a')=='9e': 21.f("154.2a(%150)" % 19.2c(9a) ) 15a=88(); 48=5e; f3=5e; 12=5e; 51=5e; 63=5e 58: 51=117.35(15a["51"]) 1e: 45 58: 48=117.35(15a["48"]) 1e: 45 58: f3=117.35(15a["f3"]) 1e: 45 58: 12=66(15a["12"]) 1e: 45 58: 63=117.35(15a["63"]) 1e: 45 #29 "131: "+59(51); 29 "12e: "+59(12); 29 "142: "+59(48); 29 "12d: "+59(f3) 16 12==5e 12b 48==5e 12b 65(48)<1: 70() 57 12==1:77(48) 57 12==2:a8() 57 12==3:97(48,f3) c.b0(66(2f.1b[1]))
通过索引到数据中以选择适当的组件来替换这些各个部分(例如'c',在第一行中成为12,这是xbmcplugin从管道分隔的数据中获取的)。
'c'
12
xbmcplugin
>>> for x in range(20): print format(x, '2'), format(x, '2x'), data[x] 0 0 0 1 1 1 2 2 2 3 3 3 4 4 replace 5 5 5 6 6 quote_plus 7 7 response 8 8 8 9 9 9 10 a a 11 b B 12 c xbmcplugin 13 d d 14 e thumbnailImage 15 f executebuiltin 16 10 10 17 11 urllib2 18 12 mode 19 13 youtube
该程序生成并执行以下操作:
import xbmc,xbmcaddon,xbmcgui,xbmcplugin,urllib,urllib2,os,re,sys,urlresolver,random from resources.libs.common_addon import Addon from metahandler import metahandlers addon_id = 'plugin.video.ukturk' selfAddon = xbmcaddon.Addon(id=addon_id) addon = Addon(addon_id, sys.argv) fanart = xbmc.translatePath(os.path.join('special://home/addons/' + addon_id , 'fanart.jpg')) icon = xbmc.translatePath(os.path.join('special://home/addons/' + addon_id, 'icon.png')) baseurl = 'http://www.metalkettle.co/UKTurk/Index.txt' adultopt = selfAddon.getSetting('adult') adultpass = selfAddon.getSetting('password') iconimage = addon.queries.get('iconimage', '') metaset = selfAddon.getSetting('enable_meta') ytapi1 ='https://www.googleapis.com/youtube/v3/search?q=' ytapi2 ='®ionCode=US&part=snippet&hl=en_US&key=AIzaSyA7v1QOHz8Q4my5J8uGSpr0zRrntRjnMmk&type=video&maxResults=50' ytpl = 'https://www.googleapis.com/youtube/v3/playlistItems?part=snippet&playlistId=' ytpl2 = '&maxResults=50&key=AIzaSyBAdxZCHbeJwnQ7dDZQJNfcaF46MdqJ24E' def Index(): link=open_url(baseurl) match=re.compile('name="(.+?)".+?url="(.+?)".+?img="(.+?)"',re.DOTALL).findall(link) for name,url,iconimage in match: if not 'XXX' in name: addDir(name,url,1,iconimage,fanart) if 'XXX' in name: if adultopt == 'true': if adultpass == '': dialog = xbmcgui.Dialog() ret = dialog.yesno('Adult Content', 'You have opted to show adult content','','Please set a password to prevent accidental access','Cancel','Lets Go') if ret == 1: keyb = xbmc.Keyboard('', 'Set Password') keyb.doModal() if (keyb.isConfirmed()): passw = keyb.getText() selfAddon.setSetting('password',passw) addDir(name,url,1,iconimage,fanart) if adultopt == 'true': if adultpass <> '': addDir(name,url,1,iconimage,fanart) addLink('UK Turk Twitter Feed','url',2,'http://www.metalkettle.co/UKTurk/thumbs/twitter.jpg',fanart) xbmc.executebuiltin('Container.SetViewMode(500)') def GetChans(url): if 'Index' in url: CatIndex(url) if 'XXX' in url: if adultpass <> '': dialog = xbmcgui.Dialog() ret = dialog.yesno('Adult Content', 'Please enter the password you set','to continue','','Cancel','Show me the money') if ret == 1: try: keyb = xbmc.Keyboard('', 'Set Password') keyb.doModal() if (keyb.isConfirmed()): passw = keyb.getText() if passw == adultpass: channels = GetList(url) for channel in channels: addLink(channel["name"],channel["url"],3,iconimage,fanart) except:pass if 'movies' in url: channels = GetList(url) cnt = len(channels) for channel in channels: addLinkMeta(channel["name"],channel["url"],3,iconimage,cnt,isFolder=False) setView('movies', 'MAIN') if 'Index' in url: xbmc.executebuiltin('Container.SetViewMode(50)') elif 'XXX' not in url: burl = url channels = GetList(url) for channel in channels: if 'youtube.com/results?search_query=' in channel["url"]: addDir(channel["name"],channel["url"],3,iconimage,fanart) elif 'youtube.com/playlist?list=' in channel["url"]: addDir(channel["name"],channel["url"],3,iconimage,fanart) else: if 'txt' in channel["url"]: addDir(channel["name"],channel["url"],3,iconimage,fanart) else: addLink(channel["name"],channel["url"],3,iconimage,fanart) xbmc.executebuiltin('Container.SetViewMode(50)') def CatIndex(url): link=open_url(url) match=re.compile('name="(.+?)".+?url="(.+?)".+?img="(.+?)"',re.DOTALL).findall(link) for name,url,iconimage in match: if 'youtube.com/playlist?list=' in url: addDir(name,url,3,iconimage,fanart) elif 'youtube.com/results?search_query=' in url: addDir(name,url,3,iconimage,fanart) else: addDir(name,url,1,iconimage,fanart) xbmc.executebuiltin('Container.SetViewMode(50)') def GetList(url): link=open_url(url) matches=re.compile('^#.+?:-?[0-9]*(.*?),(.*?)\n(.*?)$',re.I+re.M+re.U+re.S).findall(link) li = [] for params, name, url in matches: item_data = {"params": params, "name": name, "url": url} li.append(item_data) list = [] for channel in li: item_data = {"name": channel["name"], "url": channel["url"]} matches=re.compile(' (.+?)="(.+?)"',re.I+re.M+re.U+re.S).findall(channel["params"]) for field, value in matches: item_data[field.strip().lower().replace('-', '_')] = value.strip() list.append(item_data) return list def PLAYLINK(url,name): print url if 'txt' in url: print 'Found txt' GetChans(url) else: if 'youtube.com/results?search_query=' in url: print 'Youtube Search' searchterm = url.split('search_query=')[1] ytapi = ytapi1 + searchterm + ytapi2 req = urllib2.Request(ytapi) req.add_header('User-Agent', 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-GB; rv:1.9.0.3) Gecko/2008092417 Firefox/3.0.3') response = urllib2.urlopen(req) link=response.read() response.close() link = link.replace('\r','').replace('\n','').replace(' ','') match=re.compile('"videoId": "(.+?)".+?"title": "(.+?)"',re.DOTALL).findall(link) print match for ytid,name in match: url = 'https://www.youtube.com/watch?v='+ytid addLink(name,url,3,iconimage,fanart) elif 'youtube.com/playlist?list=' in url: print 'Youtube Playlist' searchterm = url.split('playlist?list=')[1] ytapi = ytpl + searchterm + ytpl2 req = urllib2.Request(ytapi) req.add_header('User-Agent', 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-GB; rv:1.9.0.3) Gecko/2008092417 Firefox/3.0.3') response = urllib2.urlopen(req) link=response.read() response.close() link = link.replace('\r','').replace('\n','').replace(' ','') match=re.compile('"title": "(.+?)".+?"videoId": "(.+?)"',re.DOTALL).findall(link) for name,ytid in match: url = 'https://www.youtube.com/watch?v='+ytid addLink(name,url,3,iconimage,fanart) elif 'dailymotion' in url: print 'DailyMotion' url = url.replace('video','embed/video') req = urllib2.Request(url) req.add_header('User-Agent', 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-GB; rv:1.9.0.3) Gecko/2008092417 Firefox/3.0.3') response = urllib2.urlopen(req) link=response.read() response.close() match=re.compile('mp4","url"\:"(.+?)"').findall(link)[0] streamurl=match.replace('\/','/') ok=True liz=xbmcgui.ListItem(name, iconImage=iconimage,thumbnailImage=iconimage); liz.setInfo( type="Video", infoLabels={ "Title": name } ) ok=xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]),url=streamurl,listitem=liz) try: xbmc.Player ().play(streamurl, liz, False) return ok except: pass else: print 'Direct Link' if urlresolver.HostedMediaFile(url).valid_url(): streamurl = urlresolver.HostedMediaFile(url).resolve() else: streamurl=url ok=True liz=xbmcgui.ListItem(name, iconImage=iconimage,thumbnailImage=iconimage); liz.setInfo( type="Video", infoLabels={ "Title": name } ) ok=xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]),url=streamurl,listitem=liz) try: xbmc.Player ().play(streamurl, liz, False) return ok except: pass def TWITTER(): text = '' twit = 'https://script.google.com/macros/s/AKfycbyBcUa5TlEQudk6Y_0o0ZubnmhGL_-b7Up8kQt11xgVwz3ErTo/exec?588677963413065728' req = urllib2.Request(twit) req.add_header('User-Agent', 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-GB; rv:1.9.0.3) Gecko/2008092417 Firefox/3.0.3') response = urllib2.urlopen(req) link=response.read() response.close() link = link.replace('/n','') link = link.decode('utf-8').encode('utf-8').replace(''','\'').replace(' ',' - ').replace('…','') match=re.compile("<title>(.+?)</title>.+?<pubDate>(.+?)</pubDate>",re.DOTALL).findall(link)[1:] for status, dte in match: try: status = status.decode('ascii', 'ignore') except: status = status.decode('utf-8','ignore') dte = dte[:-15] status = status.replace('&','') dte = '[COLOR blue][B]'+dte+'[/B][/COLOR]' text = text+dte+'\n'+status+'\n'+'\n' showText('[COLOR blue][B]@uk_turk[/B][/COLOR]', text) def showText(heading, text): id = 10147 xbmc.executebuiltin('ActivateWindow(%d)' % id) xbmc.sleep(100) win = xbmcgui.Window(id) retry = 50 while (retry > 0): try: xbmc.sleep(10) retry -= 1 win.getControl(1).setLabel(heading) win.getControl(5).setText(text) return except: pass def open_url(url): url += '?%d=%d' % (random.randint(1, 10000), random.randint(1, 10000)) req = urllib2.Request(url) req.add_header('User-Agent', 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-GB; rv:1.9.0.3) Gecko/2008092417 Firefox/3.0.3') response = urllib2.urlopen(req) link=response.read() link = link.replace('\r','').replace('\t','').replace(' ','').replace('\'','') response.close() return link def get_params(): param=[] paramstring=sys.argv[2] if len(paramstring)>=2: params=sys.argv[2] cleanedparams=params.replace('?','') if (params[len(params)-1]=='/'): params=params[0:len(params)-2] pairsofparams=cleanedparams.split('&') param={} for i in range(len(pairsofparams)): splitparams={} splitparams=pairsofparams[i].split('=') if (len(splitparams))==2: param[splitparams[0]]=splitparams[1] return param def addDir(name,url,mode,iconimage,fanart,description=''): u=sys.argv[0]+"?url="+urllib.quote_plus(url)+"&mode="+str(mode)+"&name="+urllib.quote_plus(name)+"&iconimage="+urllib.quote_plus(iconimage)+"&description="+urllib.quote_plus(description) ok=True liz=xbmcgui.ListItem(name, iconImage="DefaultFolder.png", thumbnailImage=iconimage) liz.setInfo( type="Video", infoLabels={ "Title": name, 'plot': description } ) liz.setProperty('fanart_image', fanart) ok=xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]),url=u,listitem=liz,isFolder=True) return ok def addLink(name,url,mode,iconimage,fanart,description=''): u=sys.argv[0]+"?url="+urllib.quote_plus(url)+"&mode="+str(mode)+"&name="+urllib.quote_plus(name)+"&iconimage="+urllib.quote_plus(iconimage)+"&description="+urllib.quote_plus(description) ok=True liz=xbmcgui.ListItem(name, iconImage="DefaultFolder.png", thumbnailImage=iconimage) liz.setInfo( type="Video", infoLabels={ "Title": name, 'plot': description } ) liz.setProperty('fanart_image', fanart) ok=xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]),url=u,listitem=liz,isFolder=False) return ok def addLinkMeta(name,url,mode,iconimage,itemcount,isFolder=False): if metaset=='true': if not 'COLOR' in name: splitName=name.partition('(') simplename="" simpleyear="" if len(splitName)>0: simplename=splitName[0] simpleyear=splitName[2].partition(')') if len(simpleyear)>0: simpleyear=simpleyear[0] mg = metahandlers.MetaData() meta = mg.get_meta('movie', name=simplename ,year=simpleyear) u=sys.argv[0]+"?url="+urllib.quote_plus(url)+"&site="+str(site)+"&mode="+str(mode)+"&name="+urllib.quote_plus(name) ok=True liz=xbmcgui.ListItem(name, iconImage=meta['cover_url'], thumbnailImage=iconimage) liz.setInfo( type="Video", infoLabels= meta ) contextMenuItems = [] contextMenuItems.append(('Movie Information', 'XBMC.Action(Info)')) liz.addContextMenuItems(contextMenuItems, replaceItems=True) if not meta['backdrop_url'] == '': liz.setProperty('fanart_image', meta['backdrop_url']) else: liz.setProperty('fanart_image', fanart) ok=xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]),url=u,listitem=liz,isFolder=isFolder,totalItems=itemcount) return ok else: u=sys.argv[0]+"?url="+urllib.quote_plus(url)+"&site="+str(site)+"&mode="+str(mode)+"&name="+urllib.quote_plus(name) ok=True liz=xbmcgui.ListItem(name, iconImage=icon, thumbnailImage=icon) liz.setInfo( type="Video", infoLabels={ "Title": name } ) liz.setProperty('fanart_image', fanart) ok=xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]),url=u,listitem=liz,isFolder=isFolder) return ok def setView(content, viewType): if content: xbmcplugin.setContent(int(sys.argv[1]), content) if selfAddon.getSetting('auto-view')=='true': xbmc.executebuiltin("Container.SetViewMode(%s)" % selfAddon.getSetting(viewType) ) params=get_params(); url=None; name=None; mode=None; site=None; iconimage=None try: site=urllib.unquote_plus(params["site"]) except: pass try: url=urllib.unquote_plus(params["url"]) except: pass try: name=urllib.unquote_plus(params["name"]) except: pass try: mode=int(params["mode"]) except: pass try: iconimage=urllib.unquote_plus(params["iconimage"]) except: pass #print "Site: "+str(site); print "Mode: "+str(mode); print "URL: "+str(url); print "Name: "+str(name) if mode==None or url==None or len(url)<1: Index() elif mode==1:GetChans(url) elif mode==2:TWITTER() elif mode==3:PLAYLINK(url,name) xbmcplugin.endOfDirectory(int(sys.argv[1]))