Szkriptek: Python, Perl, Bash, ...

Instagram OAuth nem fogadja el a küldött JSON adatot

Sziasztok,

Egy Flask alapú weboldalon dolgozom, ami majd a jövőben az Instagram API-n keresztül fog lekérni adatokat, ezért szükséges hogy azonosítsam a felhasználókat OAuth2 segítségével. Elvileg nem bonyolult a folyamat: https://www.instagram.com/developer/authentication/ de a harmadik lépésnél nem találom a Python megoldást.

Az ide vonatkozó kódrészletem így néz ki:


@app.route('/callback')
def callback():
    code = request.args.get('code')

    payload = {"client_id": client_id,
    "client_secret": client_secret,
    "grant_type": "authorization_code",
    "redirect_uri": redirect_uri,
    "code": code}

    r = requests.post('https://api.instagram.com/oauth/access_token', json=payload)
    return r.text

A válasz pedig ez a hibaüzenet:


{"error_type": "OAuthException", "code": 400, "error_message": "You must provide a client_id"}

A

client_id

változó fentebb definiálva van, a

code

változó is működik. Valószínűleg a

requests.post()

függvényemmel van valami gond, de nem igazán találom, hogy mi lehet az. Az is kizárt, hogy a

client_id

tartalma hibásan van megadva, mert az OAuth egy korábbi fázisában ugyanez a változó még működik.
Az instagram leírásában egy

curl -F

requestet ad meg példaként.
Azt gondolom, hogy az én

requests.post()

függvényem ezzel azonos eredményt ad, de könnyen lehet, hogy ebben tévedek.

Előre is köszönöm, ha valakinek van ötlete.

kicsit megakadtam a bash szkriptben

Kinyertem a csatorna listát az mplayer konfigból így.

mplayer_channel_list="/home/$USER/.mplayer/channels.conf.cbl"
cat ${mplayer_channel_list} | awk -vFS=":" '{printf("%03d %s\n", NR, $1 ";")}'

Ez így jó is. Viszont szeretném megjeleníteni rendezett 4 oszlopos formában.

Erre két szubrutin szolgál mely meg is jeleníti, de levágja a szöveget a szóközöknél.
Vagyis

061 Spektrum
065 Nat

a Geo HD már nem látszik.

A mezőhatároló a ; karakter mert arra még talán szükség van. S mivel ez foglalt, így nem tudok megadni neki mást.
De nem is valószínű hogy azzal meglehetne oldani.

Programozási nyelvek piaci értékének becslése, jövőbeli értéke

Kiváncsi vagyok, hogy a HUP közössége/közönsége hogy gondolkozik a programozási nyelvekrol, és azok jövőjerol, jövőbeli értékéről. Csinálok is ehhez egy (nem kőbe vésett) hozzászólás sablont, ami alapján el tudunk indulni.


Szerintem ma a munkaerőpiacon ezzel a programozási nyelvvel/technológiával/függvénykönyvtárral lehet a legtöbbet kereső állásokat megfogni: [insert]
Szerintem ma a munkaerőpiacon ebből a programozási nyelvvel/technológiával/függvénykönyvtárral kapcsolatban van a legnagyobb munkaerőhiány: [insert]
A következő nyelvek/technológiák/függvénykönyvtárak számomra nem szimpatikusak, de mégis választanám projektekhez, mert találunk hozzá munkaerőt: [insert] (...[insert], [insert]...)
A következő nyelvek/technológiák/függvénykönyvtárak számomra szimpatikusak, de mégsem választanám, mert nem találnék hozzáértő szakembert a munkaerőpiacon: [insert] (...[insert], [insert]...)

Jóslatok:
Szerintem 10 év múlva a következő nyelv/technológia/függvénykönyvtár ismerete fogja a legtöbbet érni a munkaerőpiacon: [insert]
Szerintem 10 év múlvára a következő nyelvek/technológiák/függvénykönyvtárak munkaerőpiaci értéke fog a legjelentősebb mértékben csökkenni: [insert] (...[insert], [insert]...)

[opcionális indoklások]

Vagy nyugodtan tegyetek hozzá, ahogy jónak érzitek.

Köszönöm

sed, awk - minden 2. karakter törlése, 32 karakterig

Sziasztok,

Hogy lehet megoldani, hogy egy stringból (bcrypt hash-ről van szó,), minden 2. karaktert töröljek, de csak 64 karakterig? (másképpen fogalmazva, minden 2. karaktert törölnöm kellene, egészen addig míg a törölt karaktertek száma eléri a 32-t)

input: $826y4$31226$dZbD2JfjeZ3TbIe44M0zclck2O4T1l8j7Y7jfl6maZ2ecU900ObFJk9iz8iCE5AODPQx4QkiQjJOVmG
kívánt output: $2y$12$ZDJjZTI4MzlkOTljYjlmZeU0OFJk9iz8iCE5AODPQx4QkiQjJOVmG

sed-el sikerül, de ez minden 2. karaktert töröl.
command: sed -E 's/(.)./\1/g' file.txt

Megoldható valahogy? Preferált megoldásként sed, awk használata jó lenne.

Köszönöm az ötleteket.

változó átadása tömbnévnek

Sziasztok!

Van egy mappam amiben szoveges fileok (szofajok nevei) tartalmaznak szavakat. Ezeket a szofajnevekkel ellatott tombokbe kiszervezem, majd megakarom hivni oket dinamikusan. Az a kerdesem, hogy valtozo neveket meglehet-e adni tombnevnek?

---------
A vonatkozo kodreszletek:

ftomb=($fajlok) #itt beteszek fileneveket egy tombbe
...
for ((i=0; i<${#ftomb[*]}; i++))
do
aktszofaj[i]=${ftomb[$i]}
aktszofajhossz[i]=$( cat ${ftomb[$i]} | wc -l )

for ((j=1; j<=${aktszofajhossz[$i]}; j++))
do
eval "akttombnev=${ftomb[$i]}"
eval $akttombnev[j]='$(sed -n $j"p" ${aktszofaj[i]})'
done
done

#az alabbi szofajnevvel ellatott tombokbe most megtalalhatoak a szavak (minden szo egy sor)
#pl. az echo ${igek[@]} -re helyes eredmenyt kapok

#kesobb viszont egy funkcio altal visszaadott parameterkent mar nemmukodik:

function randomszo() {

atomb=$2

echo ${igek[$((RANDOM%${#igek[@]}+1))]} #igy mukodik
echo ${atomb[$((RANDOM%${#atomb[@]}+1))]} #igy nem mukodik
echo $atomb[@] #igy sem mukodik
}

randomszo 1 igek

---------
Elnezest ha tul lamer a kerdes -.- Eval-al probalkoztam de szerintem az nem valo erre, az a sejtesem hogy itt valami szintaktikai dolog lehet a megoldas.

awk - cut username from mail addresses

Sziasztok,

Van egy mail címeket tartalmazó file.
Szeretném awk-t használva - -gsub fügvénnyel vagy regex-el - kilistázni a username-t.

email.txt sorok minta:

freeroute@gmail.com
free34te@gmail.com
freetoyota@co.uk

Elvárt output:

freeroute
free34te
freetoyota

Sed-el sikerült, awk-val nem jutok előbbre:
sed -E 's/([A-Za-z0-9]+).*/\1/' email.txt or
sed -E 's/@.*//' email.txt

sort és awk [megoldva]

Sziasztok.

Adott egy söveges fie, melyben a sorokban vessző a mezőelválasztó (,).
Awk megmondja ugyan, hogy a 6. mezőnek milyen szám a tartalma, de kérdésem az,van-e az awk-nak olyan elvetemült kapcsolója, ami a BASH "sort -n" parancsát helyettesíti?

Azt szeretném, hogy a 6. oszlopban szereplő szám szerint csökkenő sorrendben íródjon ki a szöveges file tartalma.
Meg tudom oldani sok sorral a scriptet, de nem bírom elképzelni, hogy az awk ne tudna ilyesmit. A szöveges file közel 900 MB, sokat javítana a helyzeten, ha kisebb lenne a feldolgozó script.

Kösz minden tanácsot

[megoldva] find furcsaság

Valamit nem értek. Persze lehet, hogy csak nem veszek észre valami triviálisat, ha erről lenne szó, írjátok meg! Köszi.

Feladat: ki akartam válogatni a mentéseimből a videókat, amik egy adott dátum után készültek.

Több iteráción keresztül eljutottam oda, hogy azonosítottam azokat a fájl kiterjesztéseket, amik nem képek, nem egyebek, hanem vagy videó, vagy nem ismerem és akár videó is lehet.

Megszámoltam, hány ilyen van (1):

$ find -L /mnt/nas/backup/Pictures/ -iname *.3gp -o -iname *.amr -o -iname *.m4a -o -iname *.mov -o -iname *.avi -o -iname *.mp4 -type f -newermt 2013-11-15 | wc -l
834

OK, gondoltam legyűjtöm ezeket egy helyre, hogy ne kelljen mindig a finddal vacakolni (2):

$ find -L /mnt/nas/backup/Pictures/ -iname *.3gp -o -iname *.amr -o -iname *.m4a -o -iname *.mov -o -iname *.avi -o -iname *.mp4 -type f -newermt 2013-11-15 -print -exec ln -s '{}' . \;

A könyvtárban viszont ennél jóval kevesebb fájl lett:

$ ls -1 | wc -l
348

Na, gondoltam, bizonyára voltak duplikációk, nem tudta ugyanazt a symlinket használni többször azonos nevű fájlokhoz, stb.
Jó, gondoltam, lementem a fájl listát, basename | sort | uniq és meglátjuk, hogy jó eredmény jön-e ki, vagy van olyan, ami valami más miatt maradt le. (3)

$ find -L /mnt/nas/backup/Pictures/ -iname *.3gp -o -iname *.amr -o -iname *.m4a -o -iname *.mov -o -iname *.avi -o -iname *.mp4 -type f -newermt 2013-11-15 -print > filelistln-s.txt
$ wc -l filelistln-s.txt
348 filelistln-s.txt

Izé. Itt elakadtam.
Ha jól látom, a két parancs (1), ami 834-et ad, és (2) meg (3), ami 348-at ad, ugyanazokat a válogatási paramétereket adja a findnak, csak a -print az eltérés.

Nézzük, mit mond a man find:

If no expression is given, the expression -print is used
...
-print True; print the full file name on the standard output, followed by a newline.

Szóval elméletileg a -print megadása az utasítás végén az égvilágon semmit nem változtat, ha nem adom meg, akkor is ugyanúgy végrehajtja.

(a problémámat a két különböző fájl lista összehasonlításával tudom egyébként kezelni, szóval ez nem akadályoz, csak elgondolkoztatott).

Viszont tovább nézve a fájlok különbségét, feltűnt, hogy a 834 darabosban számos olyan fájl van, ami a megadott dátum előtti. A 348-asban nem találtam egyet se (szemmel átfutva).
Nem tudom még, hogy ez-e az egyetlen különbség, de ez megint felvet egy kérdést:

Ha a két esetben a find-nak átadott paraméterlista ugyanaz, akkor miért lehet eltérés az eredményben?
Azt írja a man, hogy operátorok (pl. -o és -a) kapcsolják össze a kifejezés elemeit, és ha hiányzik az operátor, akkor logikai és kapcsolatot feltételez.
Ez alapján a -newerXY elem és kapcsolatban van a többivel, szóval nem értem, hogy találhatott a find olyasmit, ami korábbi.
És máskor meg ügyesen kihagyja ezeket.