これは私のスクリプトです。Python文字列の比較が正しく機能しない
import MySQLdb import feedparser import string
def checkunique(t):
#t1 = ''.join(filter(lambda c: c in string.printable, t))
cur.execute("SELECT title from linkstwo")
titles = cur.fetchall()
for k in titles:
#k1 = ''.join(filter(lambda c: c in string.printable, k))
print "'%s'" % k
if t == k:
return False
return True
db = MySQLdb.connect ("localhost","root",password,"torrents") print "DB connection successful" cur = db.cursor()
url = "https://extratorrent.cc/rss.xml?type=popular&cid=4"
feed = feedparser.parse(url)
print "Parsing successful"
for post in feed.entries:
t = post.title
m = post.magneturi
#print "'%s'" % t
if checkunique(t):
cur.execute("INSERT INTO linkstwo (title, maglink) VALUES ('%s', '%s')" % \
(t, m))
db.commit()
print "Script ended"
RSSフィードを解析し、新しいエントリをデータベースに追加します。
私の問題は、関数checkunique
が常にtrueを返し、重複したエントリを取得し続けることです。私は解決策のいくつかを試してみたかもしれない印字不可能な文字を取り除くことを試みましたが、まだ運がありません。
ところで、これは一意性をチェックするのに非常に非効率的な方法です。すべてのタイトルを繰り返し選択します...データベーステーブルにユニーク制約を設定し、トリガーされたときに重複エラーをフェッチします。 – trincot
比較でk [0]を使用しないでください。 titlesという変数はタプルのタプルでなければなりません。 –
これはビルドしたいと思っている実際のスクリプト用のテストスクリプトです。新しいタイトルを別のテーブル(データベースのダウンロード)に追加するので、タイトルをこのように比較することが不可欠です。そのテーブルのデータを使用して、関連するトレントを別のスクリプトでダウンロードします。 –