urbit/main/app/twit/core.hook
2014-08-27 23:00:41 +00:00

123 lines
5.1 KiB
Plaintext

:: A simple Twitter servant.
::
:::: /hook/core/twit/app
::
/? 314 :: need urbit 314
/+ twitter :: use twitter library
/= front /:/%%/front:/hymn/ :: load front page
::
:::: structures
::
|% :: structures
++ axle ,[%0 axle-a] :: application state
++ axle-a ::
%- unit ::
$: las=@da :: update time
txt=@t :: XX timeline text
jon=json :: timeline json
== ::
++ axle-old :: any historic state
$% [%0 axle-a] ::
== ::
++ gilt :: subscription frame
$% [%json p=json] :: json data
[%html p=@t] :: html text
[%hymn p=manx] :: html tree
== ::
++ gift :: output action
$% [%rust gilt] :: total update
[%mean p=ares] :: message failure
[%nice ~] :: succeed
== ::
++ move ,[p=bone q=(mold note gift)] :: output operation
++ sign :: system response
$% $: %e :: from %eyre
$% [%thou p=httr] :: HTTP response
== == == ::
++ note :: system request
$% $: %e :: through %eyre
$% [%them p=(unit hiss)] :: HTTP request
== == == ::
-- ::
::
:::: constants
::
|%
++ hardcoded-key :: hardcoded keys!
:* :- 'hDDOTPfGHGlsOUbhpy6qc6XbW'
'olCkea6wm3XG4pnVCHuPIozUF2ggH1sHjnBtuT4Ai6rCOeQGzO'
:- '2485712317-R77Lpdu5rAJadRVxTXPpnxvcwS0IfNG7QEzLPty'
'a41d83XId0P7QQbodkPYv3zxoEL0Cq9EsN2eXZBZAwAWA'
==
--
!:
:::: program
::
|_ $: hid=hide :: system state
vat=axle :: custom state
==
++ it :: internals
|%
++ line :: get timeline
(~(stat-home twit hardcoded-key lat.hid `@`eny.hid) ~ ~)
::
++ lint :: publish timeline
^- (list move)
?~ +.vat ~
%+ turn
(skim (~(tap by sup.hid)) |=([* * pax=path] ?=([%line ~] pax)))
|=([ost=bone *] `move`[ost give/rust/json/[jon.u.vat]])
::
++ post :: post a tweet
|= txt=cord
^- hiss
(~(stat-upda twit hardcoded-key lat.hid `@`eny.hid) [%status txt]~ ~)
--
::
++ page front :: build front page
++ prep :: load old state
|= old=(unit (unit axle-old))
[~ +>]
::
++ peer :: accept subscriber
|= [ost=bone you=ship pax=path]
^- [(list move) _+>]
:_ +>.$
?~ pax [ost %give %rust %hymn page]~
?> ?=([%line ~] pax)
?~ +.vat
[ost %pass /line %e [%them (some line:it)]]~
[ost %give %rust %json jon.u.vat]~
::
++ poke-json :: browser message
|= [ost=bone his=ship jon=json]
^- [(list move) _+>]
:_ +>.$
=+ txt=+:(need ((of [%tweet so] ~):jo jon))
~& [%tweet txt]
:~ [ost %pass /tweet/(scot %ud ost) %e [%them (some (post:it txt))]]
[ost %give %nice ~]
==
::
++ pour :: HTTP response
|= [ost=bone pax=path sih=sign]
^- [(list move) _+>]
:_ +>.$
?+ -.pax !!
%line :: timeline response
?. =(200 p.p.sih)
~& [%timeline-error p.p.sih]
~
=+ txt=`@t`q:(need r.p.sih)
=+ jon=(rash txt apex:poja) :: XX check content!!!
=+ old=&(?=(^ +.vat) =(jon jon.u.vat))
=. +.vat `[lat.hid txt jon]
?:(old ~ lint:it)
::
%tweet :: post response
=+ ost=(slav %ud -.+.pax)
~? !=(200 p.p.sih) [%tweet-error p.p.sih]
[ost %pass /line %e [%them (some line:it)]]~
==
--