|
|
@ -31,3 +31,77 @@ user and no rights for the group. All files should have `chmod 400`. |
|
|
|
|
|
|
|
|
|
|
|
The script has the specialty that sends an email when something goes wrong, so I am notifed and can fix the issue. |
|
|
|
The script has the specialty that sends an email when something goes wrong, so I am notifed and can fix the issue. |
|
|
|
If you don't want that, simply open `mail/mail.py` and replace everyting in the init function with a simple `pass`. |
|
|
|
If you don't want that, simply open `mail/mail.py` and replace everyting in the init function with a simple `pass`. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
## How does it integrate into Hugo? |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
It puts the full json reply from twitter into the data directory, if correctly configured. From there you can do two |
|
|
|
|
|
|
|
things: |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
* Automate the build (strongly recommended) |
|
|
|
|
|
|
|
* Build a template that uses the json data to build a twitter card. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
I build the template using a [partial template](https://gohugo.io/templates/partials/#readout). It sits in the directory |
|
|
|
|
|
|
|
`layouts/partials` and is called `latest_tweet.html`. The content is not very interesting: |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
``` |
|
|
|
|
|
|
|
<div class="box has-text-white brdr-yayellow bg-darkslate"> |
|
|
|
|
|
|
|
<div class="content p-4"> |
|
|
|
|
|
|
|
{{ with .Site.Data.latest_tweet }} |
|
|
|
|
|
|
|
<div class="columns"> |
|
|
|
|
|
|
|
<div class="column is-half is-offset-one-quarter"> |
|
|
|
|
|
|
|
<figure class="image is-128x128 is-centered"> |
|
|
|
|
|
|
|
<img class="is-rounded" src="/images/twitter_profile.webp"> |
|
|
|
|
|
|
|
</figure> |
|
|
|
|
|
|
|
</div> |
|
|
|
|
|
|
|
</div> |
|
|
|
|
|
|
|
<p class="has-text-centered"> |
|
|
|
|
|
|
|
<a target="_blank" rel="nofollow noreferrer noopener" href="https://twitter.com/{{.user.name}}"> |
|
|
|
|
|
|
|
@{{ .user.name }} |
|
|
|
|
|
|
|
</a> |
|
|
|
|
|
|
|
</p> |
|
|
|
|
|
|
|
<hr class="twitter-hr"> |
|
|
|
|
|
|
|
<p class="mt-5 has-text-justified"> |
|
|
|
|
|
|
|
{{ .full_text | safeHTML }} |
|
|
|
|
|
|
|
</p> |
|
|
|
|
|
|
|
<hr class="twitter-hr"> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<div class="level mb-0"> |
|
|
|
|
|
|
|
<span class="level-left"> |
|
|
|
|
|
|
|
<a target="_blank" rel="nofollow noreferrer noopener" href="https://twitter.com/{{.user.name}}/status/{{.id_str}}">{{ slicestr .created_at 0 20 }}</a> |
|
|
|
|
|
|
|
</span> |
|
|
|
|
|
|
|
<span class="level-right"> |
|
|
|
|
|
|
|
via {{ .source | safeHTML }} |
|
|
|
|
|
|
|
</span> |
|
|
|
|
|
|
|
</div> |
|
|
|
|
|
|
|
<hr class="twitter-hr"> |
|
|
|
|
|
|
|
<div class="level"> |
|
|
|
|
|
|
|
<span class="level-item is-size-4 mr-5"> |
|
|
|
|
|
|
|
<a href="https://twitter.com/intent/like?tweet_id={{.id_str}}"> |
|
|
|
|
|
|
|
<span class="icon"><i class="fas fa-heart"></i></span> |
|
|
|
|
|
|
|
</a> |
|
|
|
|
|
|
|
</span> |
|
|
|
|
|
|
|
<span class="level-item is-size-4 mr-5"> |
|
|
|
|
|
|
|
<a href="https://twitter.com/intent/retweet?tweet_id={{.id_str}}"> |
|
|
|
|
|
|
|
<span class="icon"><i class="fas fa-retweet"></i></span> |
|
|
|
|
|
|
|
</a> |
|
|
|
|
|
|
|
</span> |
|
|
|
|
|
|
|
<span class="level-item is-size-4 mr-5"> |
|
|
|
|
|
|
|
<a href="https://twitter.com/intent/tweet?in_reply_to={{.id_str}}"> |
|
|
|
|
|
|
|
<span class="icon"><i class="fas fa-reply"></i></span> |
|
|
|
|
|
|
|
</a> |
|
|
|
|
|
|
|
</span> |
|
|
|
|
|
|
|
</div> |
|
|
|
|
|
|
|
{{ end }} |
|
|
|
|
|
|
|
</div> |
|
|
|
|
|
|
|
</div> |
|
|
|
|
|
|
|
``` |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
The important bit is this go template instruction: |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
``` |
|
|
|
|
|
|
|
{{ with .Site.Data.latest_tweet }} |
|
|
|
|
|
|
|
{{ end }} |
|
|
|
|
|
|
|
``` |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Between these you can simple call the keys from the json, so `name` in dict `user` becomes simple `{{ .user.name }}`. |
|
|
|
|
|
|
|
Neato, isn't it? |
|
|
|