😽

PythonでIPFSにJsonファイルをアップロードする

2023/10/14に公開

自分はpython初心者だがipfshttpclientを使用することで簡単にアップロードすることができたのでそれを記録する。

事前想定

簡単に説明するとipfsのノードを起動することができるというもの。
なので起動中はファイルのアップロードや参照は自由にできるが、自分でアップロードしたファイルは pin止めしないと、ipfsノードを落としてしまうと参照できなくなるので注意が必要。

ipfs daemonでノードを起動するにはipfsをインストールする必要がある。また今回ipfshttpclientを使用するにはv0.4.0 ~ v0.8.0のバージョンである必要がある。
https://pypi.org/project/ipfshttpclient/

余談だが私はipfs v0.20.0を使用しておりダウングレードする必要があったがここがうまくいかなかった。 ipfs-updateを使用することでversionのダウングレードもできるということだったが、自分の環境ではうまくいかなかったので結局手動でダウングレードすることとなった。手順は一応記しておく。(v0.7.0をインストールした。)
https://docs.ipfs.tech/how-to/ipfs-updater/

wget https://ipfs.io/ipns/dist.ipfs.tech/go-ipfs/v0.7.0/go-ipfs_v0.7.0_darwin-amd64.tar.gz

tar xvfz go-ipfs_v0.7.0_darwin-amd64.tar.gz

sudo mv go-ipfs/ipfs /usr/local/bin/

sudo rm -r ~/.ipfs

ipfs init

mameta %ipfs --version    
ipfs version 0.7.0

ipfshttpclientを使用してファイルをアップロードする

手順は至ってシンプル

  1. pip install ipfshttpclient
  2. ipfshttpclientをimport
  3. ipfs daemonでipfsノードを起動しておく
  4. client = ipfshttpclient.connect() でpythonからipfsノードに接続
  5. 関数実行

下記サンプルコードです。

import ipfshttpclient

def main():
    data = {
        "example_data": "example_value",
        "example_key": "another_value"
    }

    with ipfshttpclient.connect() as client:  # コンテキストマネージャを使用して自動的に切断
        print("connected")
        data_cid = client.add_json(data)
        print("data_cid: ", data_cid)
        uploaded_data = client.get_json(data_cid)
        print("uploaded_data: ", uploaded_data)

if __name__ == '__main__':
    main()

Discussion