Need help with rmega?
Click the “chat” button below for chat support from the developer who created it, or find similar developers for support.

About the developer

topac
116 Stars 25 Forks MIT License 213 Commits 0 Opened issues

Description

mega.nz ruby API and command-line tool

Services available

!
?

Need anything else?

Contributors list

# 309,731
C
C++
Shell
utxo
204 commits
# 180,258
Swift
oauth2
oauth-c...
megadri...
1 commit
# 184,805
Ruby
HTML
sidekiq
browser...
1 commit
# 17,963
Objecti...
Swift
swift-p...
Xcode
1 commit

Gem Version Build Status

rmega

Pure ruby library for MEGA https://mega.nz/.
Works on Linux and OSX with Ruby 1.9.3+.

Installation

  gem install rmega

Command Line Usage

Since version 0.2.0 you can use the commands

rmega-dl
and
rmega-up
to download and upload files to MEGA.
  • Downloads are resumable
  • You can download all the links in a given file, e.g.
    rmega-dl my_links.txt
  • Scrape a web page and download all the MEGA links, e.g.
    rmega-dl https://www.reddit.com/r/megalinks/foobar
  • HTTP proxy support
  • Streaming! :beer: You can use a video player (VLC works perfectly) to play videos while downloading them
  • You can use it combined with torsocks to download and upload files through the Tor network (slower)

DSL Usage

Login

require "rmega"
storage = Rmega.login("[email protected]", "your_password")

Browsing

# Print the name of the files in the root folder
storage.root.files.each { |file| puts file.name }

Print the number of files in each folder

storage.root.folders.each do |folder| puts "Folder #{folder.name} contains #{folder.files.size} files." end

Print the name and the size of the files in the recyble bin

storage.trash.files.each { |file| puts "#{file.name} of #{file.size} bytes" }

Print the name of all the files (everywhere)

storage.nodes.each do |node| next unless node.type == :file puts node.name end

Print all the nodes (files, folders, etc.) within a spefic folder

folder = storage.root.folders[12] folder.children.each do |node| puts "Node #{node.name} (#{node.type})" end

Searching

# Search for a file within a specific folder
folder = storage.root.folders[2]
folder.files.find { |file| file.name == "to_find.txt" }

Search for a file everywhere

storage.nodes.find { |node| node.type == :file and node.name =~ /my_file/i }

Note: A node can be of type :file, :folder, :root, :inbox and :trash

Download

# Download a single file
file = storage.root.files.first
file.download("~/Downloads")
# => Download in progress 15.0MB of 15.0MB (100.0%)

Download a folder and all its content recursively

folder = storage.nodes.find do |node| node.type == :folder and node.name == 'my_folder' end folder.download("~/Downloads/my_folder")

Download a file by url

public_url = 'https://mega.nz/file/MAkg2Iab#bc9Y2U6d93IlRRKVYpcC9hLZjS4G278OPdH6nTFPDNQ' Rmega.download(public_url, '~/Downloads')

Upload

# Upload a file to a specific folder
folder = storage.root.folders[3]
folder.upload("~/Downloads/my_file.txt")

Upload a file to the root folder

storage.root.upload("~/Downloads/my_other_file.txt")

Creating a folder

# Create a subfolder of the root folder
new_folder = storage.root.create_folder("my_documents")

Create a subfolder of an existing folder

folder = storage.nodes.find do |node| node.type == :folder and node.name == 'my_folder' end folder.create_folder("my_documents")

Deleting

# Delete a folder
folder = storage.root.folders[4]
folder.delete

Move a folder to the recyle bin

folder = storage.root.folders[4] folder.trash

Delete a file

file = storage.root.folders[3].files.find { |f| f.name =~ /document1/ } file.delete

Move a file to the recyle bin

file = storage.root.files.last file.trash

Empty the trash

unless storage.trash.empty? storage.trash.empty! end

Contributing

  1. Fork it
  2. Create your feature branch (
    git checkout -b my-new-feature
    )
  3. Commit your changes (
    git commit -am 'Added some feature'
    )
  4. Push to the branch (
    git push origin my-new-feature
    )
  5. Create new Pull Request

We use cookies. If you continue to browse the site, you agree to the use of cookies. For more information on our use of cookies please see our Privacy Policy.