通过curl + scrot + xclip上传图片/发帖请求

时间:2015-06-09 21:55:07

标签: json bash post curl

我正在尝试编写一个与jomo/imgur-screenshot类似的简单bash脚本,但使用ziggi/zimg-host源代码。

基本上imgur-screenshot的作用是当脚本初始化时,它会打开scrot -select(-select选项以交互方式用鼠标选择一个窗口或矩形)。然后,一旦你获取了定义区域的屏幕截图,它就会将保存的屏幕截图上传到imgur(或者在我的情况下,使用ziggi / zimg-host我的自托管站点),然后使用xclip复制所需的结果数据(最终是URL)链接到你的剪贴板。

这是我的(非常基础的)bash脚本,我现在要执行此目的:

#!/bin/bash

function uploadImage {
        curl -s -F files[]="@$1" http://ziggisite.com/upload.php
}

if [ "$#" -ne 1 ]; then
        notify-send "Upload error"
else
        uploadImage $1 | xclip -selection c
        notify-send "Upload complete"
fi

当我使用以下命令启动此脚本时:scrot -e './img.sh $f',它成功上传了一个屏幕截图,但xclip没有将正确的数据复制到我的剪贴板 - 而是复制输出的所有内容。

作为参考,ziggi / zimg-host响应如下所示:

[
    {
        "name":"image1.jpg",
        "type":2,
        "size":
        {
            "width":420,
            "height":336,
            "filesize":26834
        },
        "error":
        {
            "upload":0,
            "type":0,
            "size":0
        },
        "url":"ccc762c11f336cfa9fdbcc1b7ea4c1a3.jpg"
    }
]

基本上,一旦脚本运行,我需要它来复制响应的“url”部分,并在它的开头抛出http://ziggisite.com,因此复制到剪贴板的最终数据看起来像{ {1}}。

如果有人可以扔掉一些资源或帮助,那就太棒了!

1 个答案:

答案 0 :(得分:0)

从OP的评论中我假设他/她可以使用像jq这样的JSON解析器。然后这是jq中的解决方案。假设我们将示例响应放在response.json中,然后是

<response.json jq -r '.[0].url'

产量

ccc762c11f336cfa9fdbcc1b7ea4c1a3.jpg

,而

<response.json jq -r '"http://ziggisite.com/" + .[0].url'

产量

http://ziggisite.com/ccc762c11f336cfa9fdbcc1b7ea4c1a3.jpg

这里-r选项用于原始输出,即没有JSON的引号。