summaryrefslogtreecommitdiff
path: root/desk/ted/tw.hoon
diff options
context:
space:
mode:
authorpolwex <polwex@sortug.com>2025-06-27 22:53:52 +0700
committerpolwex <polwex@sortug.com>2025-06-27 22:53:52 +0700
commit328ebe85135912678bdacd3381126ffd66ef2761 (patch)
tree365962bf45302f2a440f766a4f3c9e0a962dbe47 /desk/ted/tw.hoon
init
Diffstat (limited to 'desk/ted/tw.hoon')
-rw-r--r--desk/ted/tw.hoon61
1 files changed, 61 insertions, 0 deletions
diff --git a/desk/ted/tw.hoon b/desk/ted/tw.hoon
new file mode 100644
index 0000000..1fffee5
--- /dev/null
+++ b/desk/ted/tw.hoon
@@ -0,0 +1,61 @@
+/- spider, jon=twatter-json
+/+ strandio, sr=sortug, w2=web2, lib=twatter
+=, strand=strand:spider
+=, dejs-soft:format
+=, strand-fail=strand-fail:libstrand:spider
+=< run
+|%
+++ get-body
+|= res=client-response:iris ^- @t
+ ?. ?=(%finished -.res) ''
+ ?~ full-file.res ''
+ q.data.u.full-file.res
+++ coki-to-string
+|= t=twatter-creds:w2 ^- cord
+ =/ at (trip auth-token.t)
+ =/ ct0 (trip ct0.t)
+ =/ kdt (trip kdt.t)
+ =/ twid (trip twid.t)
+ %- crip
+ "auth_token={at};ct0={ct0};kdt={kdt};twid={twid};"
+::
+++ run
+ ^- thread:spider
+ |= arg=vase
+ ~& > arg=arg
+ =/ m (strand vase)
+ ^- form:m
+ =/ coki muh:w2
+ =/ csrf ct0.coki
+ =/ coki-string (coki-to-string coki)
+ =/ headers (logged-headers:lib coki-string csrf)
+ |^
+ :: =/ req !<(twatter-action:w2 arg)
+ =/ req=twatter-action:w2 [%user 'spandrell4']
+ ?+ -.req (pure:m !>(%bad))
+ %user (fetch-tw-user +.req)
+ ==
+ ++ fetch-tw-user
+ |= username=@t
+ =/ vars (build-variables:lib ~[['screen_name' %s username]])
+ =/ url %- crip (weld (burl:lib user-by-name:urls:lib) "?variables={vars}&features={features:lib}")
+ =/ req1 [%'GET' url headers ~]
+ ;< ~ bind:m (send-request:strandio req1)
+ ;< res1=client-response:iris bind:m take-client-response:strandio
+ =/ body1=@t (get-body res1)
+ :: ~& >> body1
+ =/ j (de:json:html body1)
+ ?~ j (pure:m !>(%bad-js))
+ =/ dejs (username:jon u.j)
+ ?~ dejs (pure:m !>(%bad-js))
+ =/ user-id=@t u.dejs
+ =/ url2 %- crip (weld (burl:lib user-tweets:urls:lib) (userid-params:lib user-id))
+ =/ req2 [%'GET' url2 headers ~]
+ ;< ~ bind:m (send-request:strandio req2)
+ ;< res2=client-response:iris bind:m take-client-response:strandio
+ =/ body2 (get-body res2)
+ =/ jon (de:json:html body2)
+ ?~ jon (pure:m !>(%bad-json))
+ (pure:m !>(u.jon))
+ --
+--