Tôi là tác giả của tập lệnh được liên kết trong câu trả lời của @ oneqeightyfour. Vì vậy, mặc dù tôi đến bữa tiệc muộn một chút, đây là phiên bản sửa đổi của tập lệnh mà bạn có thể sử dụng.
Tôi đã tìm thấy một trang web một cú nhấp chuột cũng yêu cầu làm điều này, nhưng tôi không thể làm cho nó hoạt động. Bạn có thể muốn thử điều đó đầu tiên?
Bước 1: nhận khóa API Tumblr
Sử dụng API đơn giản hơn nhiều, từ góc độ lập trình, hơn là cố gắng cạo trang web. Ngoài ra, Tumblr T & Cs cau mày khi bạn truy cập dữ liệu hàng loạt mà không thông qua API.
Để lấy khóa API của bạn:
- Đảm bảo bạn đã đăng nhập vào Tumblr
- Tới trang đăng ký OAuth của họ .
Chọn ứng dụng Đăng ký Đăng ký, và sử dụng các chi tiết sau:
- Tên ứng dụng: Tìm tất cả các bài viết gốc của tôi
- Mô tả ứng dụng: Tìm tất cả các bài viết gốc trên một trang web; đó là, bài viết không phải là weblog
- URL gọi lại mặc định: /
Điều này sẽ đưa bạn trở lại trang đầu tiên. Bạn sẽ được hiển thị Khóa tiêu dùng OAuth . Sao chép này - chúng tôi sẽ sớm sử dụng nó.
Bước 2: Thiết lập tập lệnh
Đây là phiên bản sửa đổi nhẹ của kịch bản của tôi. Sao chép và dán phần này vào trình soạn thảo văn bản (ví dụ TextEdit hoặc Notepad) và lưu nó dưới dạng originals.py
.
Bạn nên thay thế HOSTNAME
biến bằng URL của blog của bạn và API_KEY
biến đó bằng Khóa tiêu dùng OAuth bạn đã truy xuất ở bước 1.
#!/usr/bin/env python
import json
try:
from urllib.request import urlopen
except ImportError:
from urllib2 import urlopen
HOSTNAME = "alexwlchan.tumblr.com"
API_KEY = "abcdefg"
BASE_URL = (
"http://api.tumblr.com/v2/blog/{hostname}/"
"posts?api_key={key}&reblog_info=true"
) .format(hostname=HOSTNAME,key=API_KEY)
def api_response(url):
req = urlopen(url)
return json.loads(req.read())
jsonresponse = api_response(BASE_URL)
post_count = jsonresponse["response"]["total_posts"]
for count in range(0, post_count, 20):
jsonresponse = api_response("{url}&offset={count}".format(
url=BASE_URL,
count=count))
for post in jsonresponse["response"]["posts"]:
if "reblogged_from_name" not in post:
print(post["post_url"])
print("All finished!")
Bước 3: Chạy kịch bản
Đây là tập lệnh Python, phù hợp với Python 2 hoặc 3. Nếu bạn ở Google, bạn sẽ có thể tìm thấy hướng dẫn chạy tập lệnh Python cho hệ điều hành bạn chọn.
Tập lệnh sẽ in ra một danh sách các URL mà ở đó nó không nhận được bất kỳ thông tin reblog nào từ API Tumblr. Trong thử nghiệm (rất ngắn gọn) của tôi, nó dường như nhận được một số URL thực sự bị từ chối - Tôi chưa thực hiện bất kỳ hoạt động đào nào để tìm hiểu lý do tại sao lại như vậy.
Chúc vui vẻ! :-)