Skip to content
Snippets Groups Projects
Commit f8c96957 authored by André Starosta's avatar André Starosta
Browse files

Metadata and name dependencies solved

parent 873d0da4
Branches
No related tags found
No related merge requests found
...@@ -4,6 +4,12 @@ class String ...@@ -4,6 +4,12 @@ class String
end end
end end
class String
def removeIndex
self.partition(' ')[-1]
end
end
def parseCollection searchColl def parseCollection searchColl
$client.communities.all.each do |community| $client.communities.all.each do |community|
$client.communities.collections(:id => community.id).each do |collection| $client.communities.collections(:id => community.id).each do |collection|
...@@ -17,9 +23,7 @@ end ...@@ -17,9 +23,7 @@ end
def parseCommunity searchComm def parseCommunity searchComm
$client.communities.all.each do |community| $client.communities.all.each do |community|
#p "Nucleo: #{searchComm}" if(I18n.transliterate(searchComm).removeIndex == I18n.transliterate(community.name).removeIndex)
#p "Comunidade: #{community.name.split(" ")[0]}"
if(searchComm == community.name.split(" ")[0])
return(community.id) return(community.id)
end end
end end
...@@ -75,7 +79,8 @@ def coleRec file, id ...@@ -75,7 +79,8 @@ def coleRec file, id
g.each{|file| g.each{|file|
if(file.split('.')[-1] != "metadata") if(file.split('.')[-1] != "metadata")
target = file target = file
target = target.split('/')[-1].split("_") fileName = target.split('/')[-1]
target = fileName.split("_")
if(target[0] == "COL") if(target[0] == "COL")
meta = file + "/" + file.split('/')[-1] +".metadata" meta = file + "/" + file.split('/')[-1] +".metadata"
name = getName(meta) name = getName(meta)
...@@ -102,10 +107,12 @@ def coleRec file, id ...@@ -102,10 +107,12 @@ def coleRec file, id
end end
if(target[0] == "NUCLEO") if(target[0] == "NUCLEO")
name = target[1] fileName = fileName[7..-1].gsub('_',' ')
p name id = parseCommunity(fileName)
id = parseCommunity(name) if(id == 0)
p id p "File Name: #{fileName}"
end
# p id
coleRec(file,id) coleRec(file,id)
end end
...@@ -139,7 +146,7 @@ def coleRec file, id ...@@ -139,7 +146,7 @@ def coleRec file, id
# name: name, # name: name,
# description: description # description: description
# ) # )
# end # endI18n.available_locales = [:en]
# end # end
# end # end
end end
...@@ -150,6 +157,9 @@ end ...@@ -150,6 +157,9 @@ end
$LOAD_PATH.unshift('/home/starosta/c3sl/dspace-scripts/dspace-rest-client/lib') $LOAD_PATH.unshift('/home/starosta/c3sl/dspace-scripts/dspace-rest-client/lib')
#################################### A U T E N T I C A C A O ###################################### #################################### A U T E N T I C A C A O ######################################
require 'dspace' require 'dspace'
require "i18n"
I18n.available_locales = [:en]
$client = Dspace::Client.new(dspace_api: 'https://seppirdev.c3sl.ufpr.br:8443/rest') $client = Dspace::Client.new(dspace_api: 'https://seppirdev.c3sl.ufpr.br:8443/rest')
if !$client.is_running? if !$client.is_running?
raise 'Can\'t connect to DSpace API.' raise 'Can\'t connect to DSpace API.'
...@@ -162,12 +172,13 @@ root ='/home/starosta/c3sl/dspaceFiles/BANCO-SEPPIR-20160624/' ...@@ -162,12 +172,13 @@ root ='/home/starosta/c3sl/dspaceFiles/BANCO-SEPPIR-20160624/'
d = Dir[root + "*"].sort d = Dir[root + "*"].sort
d.each{|file| d.each{|file|
com = file com = file
com = com.split('/')[-1].split('_') nameFile = file.split("/")[-1]
if(com[0] == "NUCLEO") nameFile = nameFile[7..-1]
id = parseCommunity(com[1]) nameFile = nameFile.gsub('_',' ')
end # p "File: #{nameFile}"
p id id = parseCommunity(nameFile)
p com[1] # p id
# p com[1]
coleRec(file,id) coleRec(file,id)
} }
puts"Hits: #{$hit} Misses: #{$miss}" puts"Hits: #{$hit} Misses: #{$miss}"
...@@ -2,25 +2,131 @@ ...@@ -2,25 +2,131 @@
$LOAD_PATH.unshift('/home/starosta/c3sl/dspace-scripts/dspace-rest-client/lib') $LOAD_PATH.unshift('/home/starosta/c3sl/dspace-scripts/dspace-rest-client/lib')
require 'dspace' require 'dspace'
list_all=false list_all=false
create_community=true create_community=true
create_collection=true create_collection=true
create_item=false create_item=true
# ============================================================================ # # ============================================================================ #
# Create Dspace Client # Create Dspace Client
client = Dspace::Client.new(dspace_api: 'https://seppirdev.c3sl.ufpr.br:8443/rest', logger: Logger.new(STDOUT)) client = Dspace::Client.new(dspace_api: 'https://seppirdev.c3sl.ufpr.br:8443/rest')
if !client.is_running? if !client.is_running?
raise 'Can\'t connect to DSpace API.' raise 'Can\'t connect to DSpace API.'
end end
# Login on Dspace # Login on Dspace
client.login 'admin@seppirdev.com', 'adminadmin' client.login 'admin@seppirdev.com', 'adminadmin'
# ============================================================================ #
if list_all
# ============================================================================ #
# List all COMMUNITIES/COLLECTIONS/ITEMS
# GET ALL COMMUNITIES
client.communities.all.each do |community|
puts "-> #{community.name}"
# GET ALL COMMUNITIES's COLLECTIONS
client.communities.collections(:id => community.id).each do |collection|
puts "\t->#{collection.name}"
# GET ALL COLLECTIONS's ITEMS
client.collections.items(:id => collection.id, limit: 10, offset: 0, expand: "metadata").each do |item|
puts "\t\t->#{item.name}"
# GET ALL ITEMS's BITSTREAMS
client.items.bitstreams(:id => item.id).each do |bitstream|
puts "\t\t\t->#{bitstream.name}"
end
end
end
end
# ============================================================================ #
end
if create_community
# ============================================================================ #
# Create COMMUNITY
community = client.communities.create(
Dspace::Community.new(
{
'name' => "Community Created by dspace-rest-client",
'introductoryText' => "introductoryText for this awesome community!",
'shortDescription' => "shortDescription for this awesome community!",
'sidebarText' => "sidebarText for this awesome community!"
}
)
)
puts "Created community!\n#{community.inspect}\n"
# Update COMMUNITY
community.name = "Community Updated by dspace-rest-client"
if (client.communities.update(community, id: community.id))
puts "Community successfully updated!"
end
# ============================================================================ #
end
if create_collection
# ============================================================================ #
# Create COLLECTION
collection = client.communities.create_collection( collection = client.communities.create_collection(
Dspace::Collection.new( Dspace::Collection.new(
{ {
'name' => "Collection Created by dspace-rest-client", 'name' => "Collection Created by dspace-rest-client",
'introductoryText' => "introductoryText for this awesome collection!", 'introductoryText' => "introductoryText for this awesome collection!",
'shortDescription' => "shortDescription for this awesome collection!",
'sidebarText' => "sidebarText for this awesome collection!"
} }
), ),
id: '510d006b-e6d9-4fc2-8bc9-c786717fd5c0' id: community.id
) )
puts "Created collection!\n#{collection.inspect}\n"
# Update COMMUNITY
collection.name = "Collection Updated by dspace-rest-client"
if (client.collections.update(collection, id: collection.id))
puts "Collection successfully updated!"
end
# ============================================================================ #
end
if create_item
# ============================================================================ #
# Create ITEM
item_metadata = Dspace::Item.new(
'metadata' => [
{'key' => "dc.title", 'value' => "Item Created by dspace-rest-client"},
{'key' => "dc.description", 'value' => "Description for this awesome item!"}
]
)
item = client.collections.create_item(item_metadata, id: collection.id)
file = File.new('logo-c3sl.png', 'r')
client.items.add_bitstream(
file,
id: item.id,
name: "logo-c3sl.png",
description: "Description for this awesome bitstream",
bundle_name:"???"
)
puts "Created item!\n#{item.inspect}\n"
# Get ITEM's METADATA
item = client.items.find(id: item.id, expand: "bitstreams,metadata")
puts "| metadata:"
item.metadata.each do |m|
puts "\t| #{m.key} => #{m.value}"
end
puts "| bitstreams:"
unless item.bit_streams.nil?
item.bit_streams.each do |b|
puts "\t| name => #{b.name}"
end
end
# ============================================================================ #
end
class String
def extractMeta
self[/#{"\""}(.*?)#{"\""}/m, 1]
end
end
class String
def removeIndex
self.partition(' ')[-1]
end
end
def parseCollection searchColl
$client.communities.all.each do |community|
$client.communities.collections(:id => community.id).each do |collection|
# p "procurado #{I18n.transliterate(searchColl).gsub('_',' ').removeIndex }"
# p "achado #{I18n.transliterate(collection.name).gsub('_',' ')}"
if((I18n.transliterate(searchColl).gsub('_',' ').removeIndex <=> I18n.transliterate(collection.name).gsub('_',' ').removeIndex) == 0)
return(collection.id)
end
end
end
return(0)
end
def parseCommunity searchComm
$client.communities.all.each do |community|
if(I18n.transliterate(searchComm).removeIndex == I18n.transliterate(community.name).removeIndex)
return(community.id)
end
end
return(0)
end
def parseItem searchItem
$client.communities.all.each do |community|
$client.communities.collections(:id => community.id).each do |collection|
$client.collections.items(:id => collection.id, limit: 10, offset: 0, expand: "metadata").each do |item|
puts "name: #{item.name}"
if(searchItem == item.name)
return(item.id)
end
end
return(0)
end
end
end
def getName meta
f = File.open(meta, "r")
i = 0
f.each_line{|line|
if(i == 1)
return(line.extractMeta)
end
i += 1
}
end
def getDescription meta
f = File.open(meta, "r")
i = 0
f.each_line{|line|
if(i == 2)
return(line.extractMeta)
end
i += 1
}
end
def getItemMeta meta
f = File.open(meta, "r")
i = 0
metaArray = Array.new
f.each_line{|line|
metaArray << line.extractMeta
}
return(metaArray)
end
def itemFinderRec file,id
g = Dir[file + "/*"].sort
g.each{|file|
if(file.split('.')[-1] != "metadata")
target = file
fileName = target.split('/')[-1]
target = fileName.split("_")
if(target[0] == "NUCLEO")
itemFinderRec(file,id)
end
if(target[0] == "COL")
fileName = fileName[4..-1].gsub(' ',' ')
id = parseCollection(fileName)
if(id == 0)
puts "file: #{fileName} ID zerado"
end
itemFinderRec(file,id)
end
if(target[0] == "ITEM")
createItem(file,id)
end
end
}
end
def createItem file,id
meta = file + "/" + file.split('/')[-1] + ".metadata"
if(File.exist?(meta))
metarray = getItemMeta(meta)
title = metarray[0]
metarray.delete_at(0)
author = metarray[0]
metarray.delete_at(0)
description = metarray[-1]
metarray.delete_at(-1)
keywords = metarray
else
$metamiss+= 1
title = file.split('/')[-1].gsub('_',' ')
author = ""
description = ""
keywords = title.split(' ')
end
item_metadata = Dspace::Item.new(
'metadata' => [
{'key' => "dc.title", 'value' => title},
{'key' => "dc.creator", 'value' => author},
{'key' => "dc.description", 'value' => description}
]
)
p id
item = $client.collections.create_item(item_metadata, id: id)
itemID = parseItem(title)
# g = Dir[file + "/*"].sort
# g.each{|file|
# if(file.split('.')[-1]=="pdf")
# itemFile = File.new(file,'r')
# $client.items.add_bitstream(
# itemFile,
# id:itemID,
# name:file.split('/')[-1].gsub('_',' '),
# description:" "
# )
# end
# }
end
###################################################################################################
$LOAD_PATH.unshift('/home/starosta/c3sl/dspace-scripts/dspace-rest-client/lib')
#################################### A U T E N T I C A C A O ######################################
require 'dspace'
require "i18n"
I18n.available_locales = [:en]
$client = Dspace::Client.new(dspace_api: 'https://seppirdev.c3sl.ufpr.br:8443/rest', logger: Logger.new(STDOUT))
if !$client.is_running?
raise 'Can\'t connect to DSpace API.'
end
$client.login 'admin@seppirdev.com', 'adminadmin'
#################################### C O L E C O E S ##############################################
$metamiss = 0
root ='/home/starosta/c3sl/dspaceFiles/BANCO-SEPPIR-20160624/'
d = Dir[root + "*"].sort
d.each{|file|
com = file
nameFile = file.split("/")[-1]
nameFile = nameFile[7..-1]
nameFile = nameFile.gsub('_',' ')
id = parseCommunity(nameFile)
itemFinderRec(file,id)
}
puts"Hits: #{$hit} Misses: #{$metamiss}"
This diff is collapsed.
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment