Làm thế nào để lấy tweets từ dòng lệnh?


11

Có cách nào đơn giản để lấy tweet của ai đó từ dòng lệnh không?

Tài khoản sẽ ở chế độ công khai và lệnh - hoặc tập lệnh, nếu cần - sẽ truy xuất tất cả hoặc một số lượng tweet gần đây nhất định vào tệp văn bản, một tweet trên mỗi dòng, không có siêu dữ liệu, mới nhất trong dòng đầu tiên.

Không sử dụng API, chỉ có bash.


sử dụng api python, dễ dàng và ngọt ngào
BigSack

không phải là cách tôi muốn, nhưng vì tò mò API python, bất kỳ liên kết nào, hoặc nó có trong kho không?
Straakowsky

1
Có trình bao bọc API python-twitter.
jokerdino

Câu trả lời:


7

Từ ngày kết thúc, Twitter sẽ không cho phép bạn truy cập API của họ mà không cần khóa OAuth. Nhưng như một cách giải quyết, bạn có thể sử dụng API tìm kiếm. Nó là RESTful, vì vậy bạn có thể sử dụng curlđể truy xuất kết quả tìm kiếm ở định dạng JSON. Ví dụ: nếu bạn muốn truy xuất các tweet của @ java và lưu nó vào tệp ~/.tweets, dòng mã này có thể được sử dụng:

curl http://search.twitter.com/search.json?q=from:java&page=1&rpp=10&callback=? >> $HOME/.tweets

Và bạn có thể phân tích tệp, sử dụng bất kỳ trình phân tích cú pháp JSON nào.


Các rpptham số là số af tweets được lấy ra. callbacklà hàm javascript được thực thi trên JSON kết quả. Trong trường hợp bạn không sử dụng JavaScript với api, bạn có thể bỏ nó?, Nhưng không xóa nó. Tôi sẽ gây ra một lỗi. Hướng dẫn khác về Tìm kiếm api có thể được tìm thấy trên https://dev.twitter.com/docs/api/1/get/search

Có các công cụ để phân tích JSON từ giao diện dòng lệnh. Mặc dù tôi chưa bao giờ sử dụng một tài khoản, tôi sẽ đặt một số liên kết đến một số tài nguyên để giúp bạn tìm ra công cụ phù hợp nhất:

Và như một lưu ý nhỏ, sẽ nhanh hơn khi sử dụng một số Python hoặc Ruby (hoặc những thứ khác).


Có vẻ tốt, cảm ơn bạn @g_kaya. Làm cách nào tôi có thể chỉ định, ví dụ: tất cả các tweet hoặc tối đa được phép hoặc 400 tweet? Các tùy chọn gọi lại và rpp là gì? Bạn có thể giới thiệu một trình phân tích cú pháp JSON dòng lệnh không?
Straakowsky

Tôi đã chỉnh sửa câu trả lời của mình theo câu hỏi của bạn. Hy vọng nó sẽ giúp :)

Tôi rất vui nếu chúng hữu ích, bạn hoan nghênh :)

Không còn làm việc
Dean Meehan

1
"lỗi": [{"message": "Twitter REST API v1 không còn hoạt động. Vui lòng di chuyển sang API v1.1. dev.twitter.com/docs/api/1.1/ù }]}
cavalcade

5

Nếu bạn không muốn sử dụng API Twitter, bạn có thể lấy nguồn cấp RSS của hồ sơ Twitter bằng cách sử dụng tập lệnh bash và sau đó tiến hành định dạng nó từ đó.

Vì API Twitter không dùng nguồn cấp RSS, bạn có thể khắc phục điều này bằng cách tạo nguồn cấp RSS bằng kết quả tìm kiếm.

Đây là nguồn cấp dữ liệu RSS của tweet của tôi .


Bạn sẽ phải kết hợp các tập lệnh bash cần thiết mặc dù. Từ tìm nạp nguồn cấp RSS đến định dạng các tweet theo yêu cầu của bạn.


Cảm ơn @jokerdino. Tôi ổn với định dạng tệp, nếu tôi có quyền truy cập vào tệp thô. Như tôi hỏi ở đây ( webapps.stackexchange.com/questions/34066/ cấp ), đã từng có một xml với tất cả các tweet, nhưng không còn nữa. Nguồn cấp dữ liệu rss có phạm vi thời gian giới hạn và tôi không thể tìm cách tải xuống, ví dụ: tất cả các tweet của bạn từ liên kết bạn đã gửi. Bạn có thể giúp?
Straakowsky

1
Rõ ràng, bạn chỉ có thể truy cập các tweet tối đa 9 ngày tuổi. Bất cứ điều gì cũ hơn đó không có sẵn thông qua tìm kiếm hoặc thậm chí thông qua API.
jokerdino

Bạn có chắc chắn không có cách nào để có được tweet cũ hơn 9 ngày? Tôi đã mở một câu hỏi ở đây: webapps.stackexchange.com/questions/34070/iêng
Strapakowsky

Truy cập trực tiếp vào trang của người dùng cho phép bạn tiếp tục cuộn xuống để javascript tải trang tiếp theo mà không giới hạn. Điều đó sẽ được khai thác để lấy tất cả các tweet?
Straakowsky

Liên kết này cho biết bạn không thể tìm nạp các tweet cũ hơn một tuần bằng API tìm kiếm. Và tôi không chắc chắn về việc tìm nạp các tweet bằng JavaScript. Từ những gì tôi biết, bạn không thể đọc hơn 3000 tweet hoặc hơn từ dòng thời gian.
jokerdino

2

Đây là kịch bản của tôi được thực hiện để sử dụng trình bảo vệ màn hình

#!/bin/bash

user="$1"
user="${user:=pontifex_pl}"

last_status_url=$(lynx -dump https://twitter.com/$user \
    | grep -i "$user/status/" \
    | head -1 \
    | awk '{print $2}')

lynx -dump "$last_status_url" \
    | grep 'Twitter:' -m1 -A4 \
    | tr -d '\n' \
    | sed -e 's/[^"]*"//' -e 's/".*//' \
    | tr -s ' '

echo

1

Tôi đã tạo ra một công cụ nên thực hiện gần như chính xác những gì bạn mô tả: twitter-screen-scrape . Theo mặc định, nó sẽ xuất ra bằng JSON, với siêu dữ liệu, nhưng việc chuyển đầu ra thông qua một cái gì đó như gạch dưới để loại bỏ mọi thứ bạn không muốn.

$ twitter-screen-scrape -u slang800 | underscore pluck text --outfmt text > outputfile

1

Bạn có thể đi theo con đường python + tweepy bằng cách:

  1. Tạo Ứng dụng Twitter của riêng bạn (Để nhận Khóa API)
  2. Tạo mã thông báo truy cập cho tài khoản twitter của bạn
  3. Sử dụng tập lệnh như thế này cùng với thông tin đăng nhập của bạn: https://gist.github.com/yanofsky/5436496

Tôi chỉ thử nghiệm nó và nó hoạt động tuyệt vời. Tuy nhiên, có những người dùng bảo vệ tweet của họ, vì vậy nó có thể không cho phép bạn tải xuống mọi thứ. Nhưng đó là một tính năng của twitter.

Giới hạn vẫn là 3200 và bạn nhận được tệp CSV.


1

Bạn có thể sử dụng twarcđể đưa ra một ví dụ nếu bạn muốn lưu trữ các tweet của Nassim Nicholas Taleb mà bạn sử dụng.

twarc timeline nntaleb --format csv> taleb.csv 

Bạn cũng có thể sử dụng các định dạng khác: --format {json,csv,csv-excel}

Cách định cấu hình twarc: Cách duy nhất để có được các tweet hoàn chỉnh là APIkhông may sử dụng ngay cả khi ứng dụng trong suốt, bạn cần phải có một thiết lập và cấu hình ban đầu, bạn cũng cần phải áp dụng cho API(

Kể từ tháng 7 năm 2018, bạn phải đăng ký tài khoản nhà phát triển Twitter và được chấp thuận trước khi bạn có thể tạo ứng dụng mới.

)

Khi bạn đã có các khóa ứng dụng của mình, bạn có thể cho biết twarcchúng là gì với lệnh configure.

twarc configure

Điều này sẽ lưu trữ thông tin quan trọng của bạn trong một tập tin gọi là .twarctrong thư mục chính của bạn vì vậy bạn không phải tiếp tục nhập chúng vào. Nếu bạn muốn cung cấp cho họ trực tiếp bạn có thể đặt chúng trong môi trường ( CONSUMER_KEY, CONSUMER_SECRET, ACCESS_TOKEN, ACCESS_TOKEN_SECRET) hoặc sử dụng tùy chọn dòng lệnh ( --consumer_key, --consumer_secret, --access_token, --access_token_secret).

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.