Поиск Нетегированных сообщений на Tumblr (требуется помощь в кодировании Python-3.3)


Я чрезвычайно новичок в кодировании вообще; я углубился в этот проект, чтобы помочь моей подруге пометить ее пятнадцать тысяч и более постов на Tumblr. Мы наконец закончили, но она хочет быть уверенной, что мы ничего не пропустили... Итак, я рыскал по интернету, пытаясь найти кодовое решение. Я наткнулся на скрипт, найденный здесь , который якобы делает именно то, что нам нужно-поэтому я скачал Python, and...It не работает.

Более конкретно, когда я нажимаю на по сценарию, черный ящик появляется примерно на полсекунды, а затем исчезает. Я не смог сделать скриншот коробки, чтобы узнать точно , что там написано, но я думаю, что это говорит о синтаксической ошибке. Сначала я попробовал использовать Python 2.4; похоже, он не нашел модуль Json, который использует создатель, поэтому я переключился на Python 3.3 - самую последнюю версию для Windows, и именно здесь возникают синтаксические ошибки.

#!/usr/bin/python

import urllib2
import json

hostname = "(Redacted for Privacy)"
api_key = "(Redacted for Privacy)"

url = "http://api.tumblr.com/v2/blog/" + hostname + "/posts?api_key=" + api_key

def api_response(url):
req = urllib2.urlopen(url)
return json.loads(req.read())

jsonresponse = api_response(url)
post_count = jsonresponse["response"]["total_posts"]
increments = (post_count + 20) / 20

for i in range(0, increments):

  jsonresponse = api_response(url + "&offset=" + str((i * 20)))
  posts = jsonresponse["response"]["posts"]

for i in range(0, len(posts)):
 if not posts[i]["tags"]:
  print posts[i]["post_url"]

print("All finished!")

Итак, мой вопрос таков: если эта кодировка имеет синтаксическую ошибку это можно исправить, а затем использовать для поиска не помеченных сообщений на Tumblr, что это может быть за ошибка? Если этот код устарел (либо через Tumblr, либо через обновления Python), то может ли кто-то с небольшим количеством свободного времени помочь создать новый скрипт для поиска не помеченных записей на Tumblr? Поиск Tumblr, это, кажется, полу-распространенная проблема.

Если это имеет значение, Python устанавливается в C:Python33.

Спасибо за вашу помощь.
2 3

2 ответа:

Когда я нажимаю на скрипт, черный ящик появляется примерно на полсекунды, а затем исчезает

По крайней мере, вы должны иметь возможность запускать скрипт Python из командной строки, например, выполните Упражнение 0 из "Learn Python The Hard Way".


"Поиск Нетегированных сообщений на Tumblr" сообщение в блоге содержит скрипт Python 2 (Смотрите import urllib2 в исходном коде. urllib2 переименован в urllib.request в Python 3). Легко перенести скрипт на Python 3:

#!/usr/bin/env python3
"""Find untagged tumblr posts.

Python 3 port of the script from
  http://www.alexwlchan.net/2013/08/untagged-tumblr-posts/
"""
import json
from itertools import count
from urllib.request import urlopen

hostname, api_key = "(Redacted for Privacy)", "(Redacted for Privacy)"
url = "https://api.tumblr.com/v2/blog/{blog}/posts?api_key={key}".format(
    blog=hostname, key=api_key)

for offset in count(step=20):
    r = json.loads(urlopen(url + "&offset=" + str(offset)).read().decode())
    posts = r["response"]["posts"]
    if not posts: # no more posts
        break
    for post in posts:
        if not post["tags"]: # no tags
            print(post["post_url"])

Вот та же функциональность, реализованная с помощью официального клиента Python Tumblr API v2 (только библиотека Python 2):

#!/usr/bin/env python
from itertools import count
import pytumblr # $ pip install pytumblr

hostname, api_key = "(Redacted for Privacy)", "(Redacted for Privacy)"
client = pytumblr.TumblrRestClient(api_key, host="https://api.tumblr.com")
for offset in count(step=20):
    posts = client.posts(hostname, offset=offset)["posts"]
    if not posts: # no more posts
        break
    for post in posts:
        if not post["tags"]: # no tags
            print(post["post_url"])

Tumblr имеет API. Вы, вероятно, имели бы гораздо больший успех, используя его.

Https://code.google.com/p/python-tumblr/